Skip to content

CentOS Environment Setup

This article covers common environment setup tasks on CentOS, including running databases and middleware via Docker, compiling Python from source, configuring environment variables, and upgrading the kernel.

Docker Quick Start

The following Docker commands launch common services used in development environments:

# etcd installation (basic)
docker run -itd -p 2379:2379 -p 2380:2380 --env ALLOW_NONE_AUTHENTICATION=yes --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 --name etcd bitnami/etcd:latest

# etcd installation (with auth and persistent storage)
docker run -itd --name etcd \
  --user 1001:1001 \
  -v /data/etcd/data:/bitnami/etcd/data \
  -e ALLOW_NONE_AUTHENTICATION=no \
  -e ETCD_CLIENT_CERT_AUTH=false \
  -e ETCD_ROOT_PASSWORD=your_etcd_root_password  \
  -e ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" \
  -e ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379" \
  -p 2379:2379 -p 2380:2380 \
  bitnami/etcd:latest
  
  
# etcdkeeper (web UI for etcd)
docker run -itd --name etcd-keeper -p 8000:8080 -e ETCD_SERVER=http://192.168.202.206:2379 evildecay/etcdkeeper


# MySQL
docker run -itd --name mysql -p 32577:3306 -e MYSQL_ROOT_PASSWORD=your_root_password mysql:8.0.13 

	--lower_case_table_names=1: # ignore case for table names


docker run -d \
  --name mysql-server \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  -e MYSQL_DATABASE=xboard \
  -e MYSQL_USER=xboard \
  -e MYSQL_PASSWORD=your_db_password \
  -v /home/yunwei/mysql/data:/var/lib/mysql \
  -p 32577:3306 \
  mysql:latest
  
  
# Redis
docker run -itd --name redis -p 31641:6379 redis --requirepass "your_redis_password"


docker run -itd --name mongodb \
-p 27017:27017 \
-v /data/mongodb/mongod.conf:/etc/mongod.conf \
-v /data/mongodb/data:/data/db \
-v /data/mongodb/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD="your_mongo_root_password"\
--restart=always  \
bitnami/mongodb:latest


docker run --name mongodb -p 27017:27017 -itd \
    -e MONGO_INITDB_ROOT_USERNAME=root \
    -e MONGO_INITDB_ROOT_PASSWORD="your_mongo_root_password" \
    mongo
    


# influxDB
docker run -itd -p 8086:8086 \
     --name influxdb2 \
     -v /data/influxdb2/data:/var/lib/influxdb2 \
     -v /data/influxdb2/config:/etc/influxdb2 \
     -e DOCKER_INFLUXDB_INIT_MODE=setup \
     -e DOCKER_INFLUXDB_INIT_USERNAME="admin" \
     -e DOCKER_INFLUXDB_INIT_PASSWORD="your_influxdb_admin_password" \
     -e DOCKER_INFLUXDB_INIT_ADMIN_TOKEN="your_influxdb_admin_token" \
     -e DOCKER_INFLUXDB_INIT_ORG="Bsi" \
     -e DOCKER_INFLUXDB_INIT_BUCKET="opscenter" \
     influxdb:latest

Compiling Python from Source

wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz
tar zxvf Python-3.6.15.tgz 
cd Python-3.6.15/
mkdir /usr/local/python3
./configure --prefix=/usr/local/python3.8 --enable-optimizations
make && make install

Environment Variable Configuration

# mongodb
export PATH=/usr/local/mongodb/bin:$PATH

# java
export JAVA_HOME=/usr/local/java/jdk1.8.0_311
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

# python3
export PATH=$PATH:$HOME/bin
export PATH=$PATH:/usr/local/python3/bin

# nodejs
export NODE_HOME=/usr/local/nodejs
export PATH=$NODE_HOME/bin:$PATH
export NODE_PATH=$NODE_HOME/lib/node_modules:$PATH

# golang
export GOROOT=/usr/local/golang
export GOPATH=/usr/local/golang/gocode
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

# virtualenvs
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/local/python3/bin/python3
source /usr/local/python3/bin/virtualenvwrapper.sh

Kernel Upgrade

Background

When using CentOS, certain high-version application environments may require a newer kernel to function properly. This section covers two kernel upgrade methods: yum and rpm.

Kernel types:

  • kernel-ml — “ml” stands for mainline stable; elrepo-kernel lists the latest stable mainline versions.
  • kernel-lt — “lt” stands for long term support; elrepo-kernel lists the long-term support versions. Both types can coexist, but only one version of each type is allowed at a time.

Online Installation via yum

1. Check Current Kernel Version

uname -a
# View only the version string
uname -r
# View detailed kernel info from /proc
cat /proc/version
# View OS release info
cat /etc/redhat-release

Kernel version screenshot

2. Import the Repository Source

# 1. Update the yum repository
yum -y update
# 2. Import the ELRepo public key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 3. Install the ELRepo yum source
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# 4. List available kernel versions
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

Available kernels screenshot

3. Install ML or LT Version

# Install the latest ML version
# yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml -y
# Install the latest LT version
# yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y

# Without a version number, the latest will be installed.
# Here we install LT 5.4.225-1.el7.elrepo (recommended for Kubernetes)
yum --enablerepo=elrepo-kernel install kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64 kernel-lt-5.4.225-1.el7.elrepo.x86_64 -y

After installation, you need to configure grub2 to set the default boot entry.

4. Set the Default Boot Entry

After installing the kernel, you must set it as the default boot option and reboot for it to take effect.

List all available kernels:

sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

Grub entries screenshot

The newly installed kernel is 0 : CentOS Linux (5.4.225-1.el7.elrepo.x86_64) 7 (Core). Set grub2 default to 0.

Method 1: Using the grub2-set-default command

grub2-set-default 0

Method 2: Editing /etc/default/grub

# Set GRUB_DEFAULT to 0 as shown below
vim /etc/default/grub

GRUB_DEFAULT screenshot

5. Regenerate the grub Configuration File

The GRUB2 configuration file is usually /boot/grub2/grub.cfg. You do not need to write it manually — use grub-mkconfig to generate it from the simple config at /etc/default/grub.

grub2-mkconfig -o /boot/grub2/grub.cfg

6. Reboot

# Reboot (default 30-second delay)
reboot
# Reboot immediately
reboot -h now

7. Verify the Upgrade

uname -a
# View only the version string
uname -r
# View detailed kernel info
cat /proc/version
# View OS release info
cat /etc/redhat-release

Verified kernel screenshot

8. Remove Old Kernels (Optional)

List all installed kernels:

rpm -qa | grep kernel
# yum remove kernel-<version>
yum remove kernel-3.10.0-1160.el7.x86_64 kernel-3.10.0-1160.71.1.el7.x86_64 kernel-tools-3.10.0-1160.71.1.el7.x86_64 kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64

Old kernel removal screenshot

Offline Installation via rpm

Historical kernel RPM packages: http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/

1. Download the Kernel RPM

wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm
wget http://mirrors.coreix.net/elrepo-archive-archive/kernel/el7/x86_64/RPMS/kernel-lt-5.4.225-1.el7.elrepo.x86_64.rpm

2. Install the Kernel

rpm -ivh kernel-lt-5.4.225-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-lt-devel-5.4.225-1.el7.elrepo.x86_64.rpm

3. Verify the Installed Kernel Version

rpm -qa | grep kernel

RPM installed kernels screenshot

4. Set the Default Boot Entry

List all available kernels:

sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

Grub entries for RPM screenshot

grub2-set-default 0

5. Regenerate the grub Configuration File

The GRUB2 configuration file is /boot/grub2/grub.cfg. Generate it automatically from /etc/default/grub using grub-mkconfig.

grub2-mkconfig -o /boot/grub2/grub.cfg

6. Reboot

# Reboot (default 30-second delay)
reboot
# Reboot immediately
reboot -h now

7. Verify the Upgrade

uname -a
# View only the version string
uname -r
# View detailed kernel info
cat /proc/version
# View OS release info
cat /etc/redhat-release

RPM verified kernel screenshot

8. Remove Old Kernels (Optional)

List all installed kernels:

rpm -qa | grep kernel
# yum remove kernel-<version>
yum remove kernel-3.10.0-1160.el7.x86_64 kernel-3.10.0-1160.71.1.el7.x86_64 kernel-tools-3.10.0-1160.71.1.el7.x86_64 kernel-tools-libs-3.10.0-1160.71.1.el7.x86_64

Old kernel removal screenshot

That concludes the CentOS 7 kernel upgrade to 5.4.225. If you have questions, feel free to leave a comment. Future posts will cover cloud-native and big data topics — stay tuned.

Last updated on