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:latestCompiling 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 installEnvironment 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.shKernel 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
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
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 -yAfter 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
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 0Method 2: Editing /etc/default/grub
# Set GRUB_DEFAULT to 0 as shown below
vim /etc/default/grub
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.cfg6. Reboot
# Reboot (default 30-second delay)
reboot
# Reboot immediately
reboot -h now7. 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
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
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.rpm2. 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.rpm3. Verify the Installed Kernel Version
rpm -qa | grep kernel
4. Set the Default Boot Entry
List all available kernels:
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
grub2-set-default 05. 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.cfg6. Reboot
# Reboot (default 30-second delay)
reboot
# Reboot immediately
reboot -h now7. 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
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
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.