Installing gcc 4.8 and Linuxbrew on CentOS 6

The GCC distributed with CentOS 6 is 4.4.7, which is pretty outdated. I’d like to use gcc 4.8+. Also, when trying to install Linuxbrew you run into a dependency loop where Homebrew’s gcc depends on zlib, which depends on gcc. Here’s how I solved the problem.

Note: Requires sudo privileges.

Resources:

Upgrading gcc

First, verify which version of CentOS you’re using:

1
2
$ cat /etc/centos-release
CentOS release 6.7 (Final)

Import CERN’s GPG key:

1
sudo rpm --import http://ftp.scientificlinux.org/linux/scientific/5x/x86_64/RPM-GPG-KEYs/RPM-GPG-KEY-cern

Save repository information as /etc/yum.repos.d/slc6-devtoolset.repo on your system:

1
wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo

Install:

1
sudo yum install devtoolset-2

Enable the environment:

1
scl enable devtoolset-2 bash

Test the environment:

1
2
3
4
5
6
7
8
9
10
11
$ gcc --version
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
...

$ g++ --version
g++ (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
...

$ gfortran --version
GNU Fortran (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
...

Optional: Permanently enable scl toolchain by putting this in your .bashrc (warning: don’t try to use the scl enable devtoolset-2 bash command from before in your .bashrc. This spawns a new bash shell, and if that’s in your .bashrc, it creates a new shell, which loads your .bashrc, which creates a new shell, etc.)

1
source /opt/rh/devtoolset-2/enable

Installing Linuxbrew

Enable the SCL environment:

1
scl enable devtoolset-2 bash

Create symlinks to your new gcc/g++/gfortran:

1
2
3
ln -s $(which gcc) `brew --prefix`/bin/gcc-$(gcc -dumpversion |cut -d. -f1,2)
ln -s $(which g++) `brew --prefix`/bin/g++-$(g++ -dumpversion |cut -d. -f1,2)
ln -s $(which gfortran) `brew --prefix`/bin/gfortran-$(gfortran -dumpversion |cut -d. -f1,2)

Install Linuxbrew:

1
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

Add these to your .bashrc, and source it:

1
2
3
export PATH="$HOME/.linuxbrew/bin:$PATH"
export MANPATH="$HOME/.linuxbrew/share/man:$MANPATH"
export INFOPATH="$HOME/.linuxbrew/share/info:$INFOPATH"

Test your installation:

1
2
3
brew install hello
brew test hello
brew remove hello