Steps to Install PostgreSQL Server on macOS Catalina. Install Homebrew. Open Terminal and then paste this command to install Homebrew. Homebrew is a clever application that will help us to install almost anything on macOS. Press Enter to start the installation. So I'm running macOS 10.15.2 Catalina and try to install mariadb (10.4.11, the lastest version) with Homebrew. After running brew install mariadb, brew warned that the postinstalllation didn't complete successfully. For bundler I did the following on Catalina $ brew install v8@3.15 $ bundle config build.libv8 -with-system-v8 $ bundle config build.therubyracer -with-v8-dir=$(brew -prefix v8@3.15) $ bundle install this worked ty. $ brew install node If everything installed successfully then you can type in the following command in the terminal to check the Node and NPM version. $ node -v v7.7.2.
The default bash
on macOS is still bash v3:
Just recently, bash v5 was released. The discrepancy comes from the fact that bash
has been licensed as GPL v3 since version 4. Apple does not include GPL v3 licensed tools with macOS.
However, nothing is keeping you from downloading and installing the latest bash
version.
New features include, among many other things, associated arrays (i.e. dictionaries) and better auto-completion setup.
While you would think this is a common desire, most pages I have found will simply point to Homebrew to download and install a newer bash version.
The main challenge with using brew
is that it does not work on the scale that MacAdmins require. brew
is designed for single user installation, where the user has administrator privileges. brew
’s workflows do not scale to large deployments controlled with a management system.
Ideally, there would be package installer for the latest bash version. Unfortunately, the bash project does not provide one.
In this post, I will show how you can install the latest bash version without brew
and how to build an installer package for deployment.
Manual Installation
This requires Xcode or the Developer Command Line Tools to be installed.
First, download the source for the latest bash version from this page. As of this writing the latest version is bash-5.0
and the file you want is bash-5.0.tar.gz
. Once downloaded, you can expand the archive in Finder by double-clicking.
Update: I have a post with some updated instructions to include the patches to bash 5.0.
Open a Terminal window and change directory to the newly expanded bash-5.0
directory. Then run the configure
script there.
The configure process will take a while, there will be plenty of messages showing progress.
Once the configure
process is complete. You can build bash
with the make
command.
This will build the bash
binary and the supporting files in the current directory. That’s not where we want it in the end, but it is probably a good idea see if the build process works. This will (again) take a while. There will be some odd looking warnings, but you can ignore those.
When make
succeeds, you can actually install bash
v5 with
This will build and install the bash
binary and supporting files in /usr/local/bin
and /usr/local
. sudo
is required to modify /usr/local
.
If you were just looking for a way to install bash
v5 without brew
, you are done!
There is more useful information in the rest of the post, though, so keep reading!
How the new and the old bash interact
By default, the bash v5 binary is called bash
and will be installed in /usr/local/bin
. The macOS default PATH
lists /usr/local/bin
before /bin
where the default bash v3 binary, also called bash
, is located.
This means, that when a user types bash
in to a shell, the version in /usr/local/bin
will be preferred over the pre-installed bash v3.
You can test this behavior in Terminal. Since the default shell has not yet been changed from /bin/bash
the Terminal still opens to bash v3. You can test this by showing the BASH_VERSION
environment variable:
But when you then run bash
it will invoke /usr/local/bin/bash
, so it will run the new bash v5. It will show this in the prompt, but you can also verify the BASH_VERSION
.
This might be the setup you want, when you want to use bash v5 always. It might lead to some unexpected behavior for some users, though.
One option to avoid this ambiguity is to rename the binary in /usr/local/bin
to bash5
. But then other tools such as env
(mentioned below) will not find the binary any more.
- Scripting OS X: Where PATHs come from
Note: the PATH
in other contexts will likely not contain /usr/local/bin
and further confuse matters.
bash v5 and Scripting
Scripts using bash
, should have the full path to the binary in the shebang. This way, the script author can control whether a script is executed by the default bash v3 (/bin/bash
) or the newer bash v5 (/usr/local/bin/bash
or /usr/local/bin/bash5
).
It is often recommended to use the env
command in the shebang:
The env
command will determine the path to the bash
binary in the current environment. (i.e. using the current PATH
) This is useful when the script has to run in various environments where the location of the bash binary is unknown, in other words across multiple Unix and Unix-like platforms. However, this renders the actual version of bash
that will interpret the script unpredictable.
For example, assume you have bash v5 installed in the default configuration (as /usr/local/bin/bash
. A script with the shebang #!/usr/bin/env bash
launched in the user environment (i.e. from Terminal) will use the newer bash
, as /usr/local/bin
comes before /bin
in the search order.
When you launch the same script in a different context, e.g. as an installation script, an AppleScript, or a management system, /usr/local/bin
will likely not be part of the PATH
in that environment. Then the env
shebang will choose /bin/bash
(v3). The script will be interpreted and might behave differently.
Administrators prefer certainty in their managed environments. Administrators should know the location and versions of the binaries on their systems. For management scripts, you should avoid env
and use the proper full path to the desired interpreter binary.
The solutions to resolve the ambiguity are
- use the full path to the binary in the shebang
- manage and update the additional custom version of
bash
with a management system - (optional) rename the newer
bash
binary tobash5
orbash4
(this also allows you to havebash
v4 andbash
v5 available on the same system) - Scripting OS X: On the Shebang
- Scripting OS X: Setting the PATH in Scripts
Changing a user’s default Shell to bash v5
Even though we have installed bash v5, the default shell of a new Terminal window will still use the built-in bash v3.
The path to the default shell is stored in the user record. You can directly change the UserShell
attribute with dscl
, in the ‘Advanced Options’ of the ‘Users & Groups’ preference pane, or in Directory Utility.
There is also a command to set the default shell:
The chsh
(change shell) command will check for allowed shells in the /etc/shells
file. You can easily append a line with /usr/local/bin/bash
to this file, and then chsh
will work fine.
Note: if you choose to rename the bash
binary, you have to use the changed name in /etc/shells
and with chsh
.
Remember that just running chsh
will not change the shell in the current Terminal window. It is best to close the old Terminal window and open a new one to get the new shell.
Packaging bash v5 for mass deployment
While these steps to install and configure bash v5 on a single Mac are simple enough, they would not work well with a management system for hundreds or thousands of Macs. We want to wrap all the files that make install
creates into a package installer payload.
The --help
option of the configure
script yields this useful information:
By default, make install' will install all the files in
/usr/local/bin,
/usr/local/libetc. You can specify an installation prefix other than
/usr/localusing
–prefix, for instance
–prefix=$HOME`.
When we run the configure script with the --prefix
option it creates a folder suitable as a payload for a package installer. We can then use pkgbuild
to build to create an installer pkg:
(Note: the --prefix
argument requires an absolute path.)
Automate the package creation
Brew Install Catalina Permission Denied
So, we have our workflow for building an installer package to distribute and configure bash v5:
- download the archive
- extract the archive
- run
configure
with the--prefix
argument - run
make install
to create the files in a payload folder - optional: rename the resulting
bash
binary tobash5
to avoid conflicts - add a
postinstall
script that adds/usr/local/bin/bash[5]
to/etc/shells
if not yet present - build the installer with
pkgbuild
This sounds like a workflow ripe for automation. You can get the script from this repository.
You can pass a different (valid) bash version number as an argument to the script, e.g. 4.4.18
. (I did not test anything significantly older.) The script does not autodetect the latest version and defaults to version 5.0
when no argument is given. When an update to bash v5 is published, you will have to modify the version line or run the script with an argument.
I have not (yet) figured out how to detect the latest version from the download web page. An autopkg
recipe will have to wait for that. (If someone else wants to tackle that, please do!)
Homebrew is a package managing tool. It’s more popular on Linux but is also used extensively on macOS. In fact, for apps that install as packages, Homebrew is the easiest way to remove them. Here’s how you can install Homebrew on macOS Catalina.
Xcode
In order to install Homebrew on macOS Catalina, you must have Xcode installed. You can get it from the Mac App Store. The app is large and for some reason, it downloads really slow when you get it from the Mac App store so you’re in for a little wait.
Once it’s installed, you also need to install Command Line tools for it. To install Command Line tools, open Terminal and enter the following command.
You will see a prompt asking you to confirm that you want to install the tools, and you will also see an EULA that you have to agree to.
Install Brew On Catalina
The Command Line tools don’t take too long to install. Once it’s finished you can install Homebrew.
Install Homebrew
Macbook Catalina Install Brew
Open Terminal and run the following command.
You will have to confirm that you want to install Homebrew. The Terminal will show you all the changes it will be making i.e., new directories it will make when it is installed. Confirm that you want to install it.
Macos Catalina Brew Install Mysql
After that, you only have to wait for the installation to complete. Once it is complete, you will see a message in Terminal confirming that installation was successful. You can now close Terminal.
If at any point you want to verify the Homebrew installation, you can run the following command in Terminal.
The command will return which version of Homebrew is installed on your Mac.
If you want to uninstall Homebrew, you can run the following command in Terminal.
Homebrew has tons of documentation available so if you’re not sure how to use it, go through the documentation. Apps that you can install via Homebrew often provide the command that you need to run to install them. They basically come with a script that can be run via Homebrew and the script takes care of the installation. If there’s an uninstall script available, you can run it to remove the app.
You should know that apps you install via Homebrew still have to be 64-bit if you’re installing them on Catalina. Homebrew doesn’t let users by-pass the 64-bit condition that Catalina has. There is no getting around that. On that note, Homebrew had to update to a Catalina compatible version so it’s unlikely that you will be able to install older versions of it.