Linux 基础环境搭建安装指北


Linux 基础环境安装指北

阿里巴巴开源站点

个人安装环境为 CentOS Linux release 7.6.1810 (Core)

zsh & oh my zsh

sudo yum -y update && sudo yum -y install zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
# install git if not exist
sudo yum install -y git

git clone https://github.com/powerline/fonts.git --depth=1
cd fonts
./install.sh
cd ..
rm -fr fonts

add user

# 添加用户
adduser dylan

# 添加密码
passwd dylan

# sudo 命令添加
# sudoers 文件查找
whereis sudoers
#添加时, 要注意 sudoers 文件是只读的, 先修改为可写,修改完成后再变为可读
chmod -v u+w /etc/sudoers
chmod -v u-w /etc/sudoers

# 查看组
sudo cat /etc/group | grep wheel

# 添加一个新组 group-test
sudo groupadd group-test 

# 将登陆用户加入到 wheel 用户组中, -a : append
sudo gpasswd -a $USER wheel  

# 更新 wheel 组
newgrp wheel  

这里不建议直接将用于赋予 root 权限,一般的做法是放开 wheel 组,将用户添加到 wheel 组,通过 visudo 命令打开 /etc/sudoers , 将

#Allows people in group wheel to run all commands

#%wheel ALL=(ALL) ALL

中 %wheel 前的 # 去掉, 然后将用户添加到 wheel 组。

iptables

  1. 开/重启/开机自启动
sudo systemctl start iptables
sudo systemctl restart iptables
sudo systemctl enable iptables
  1. 编辑 iptables 文件

/etc/sysconfig/iptables 文件中添加规则

配置免密登录

1. 生成 ssh 秘钥

参考 这里

ssh-keygen -t rsa -C "peifeng" -f filepath
  • -t 指定密钥类型,默认是 rsa ,可以省略。
  • -C 设置注释文字,比如邮箱。
  • -f 指定密钥文件存储文件名。默认为 ~.ssh/ 目录

    2. 配置免密登录

A 机器免密登录到 B 机器, 默认都已生成 ssh 秘钥。

  1. 登录 A 机器,运行命令 ssh-copy-id 发送本地 id_rsa.pub 到 B 机器的 ~/.ssh/authorized_keys 文件中
    ssh-copy-id dylan@B_ip
  1. 配置 A 机器的 ~/.ssh/config 文件(如果没有, 请自己添加, 注意该文件的权限至少为 600 )。 参考 这里
    Host A_alias
     HostName B_machine_ip
     User dylan
     Port 22
     IdentityFile ~/.ssh/id_rsa
     ServerAliveInterval 120 # 每隔 120 秒发送一个空包到服务端, 以保持长连接
  • Host 别名, 登录时, 直接通过该别名登录
  • HostName: 主机名或主机 ip
  • User: 登录的用户名
  • Port: 端口
  • IdentityFile: 秘钥文件路径
  1. 登录
ssh A_alias

docker install

参考

1. 通过 docker 源 安装

1.1 移除老版本, 如果是第一次安装, 可以忽略

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

1.2 安装必要的工具

yum-utils provides the yum-config-manager utility, and device-mapper-persistent-data and lvm2are required by the devicemapper storage driver.

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

1.3 设置可用的 docker-ce repository

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

 ## 这里可以使用阿里云的 docker repo
 sudo yum-config-manager \
 --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

sudo yum makecache fast

1.4 安装最新版 docker-ce, containerd

sudo yum -y install docker-ce docker-ce-cli containerd.io

## 可以指定版本安装
sudo yum -y install docker-ce-19.03.0 docker-ce-cli-19.03.0 containerd.io

## 安装过程中可能会出现 containerd.io > xxx 的提示, 可以先安装 containerd
## https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
## 到官网查找版本后执行如下命令 (centos8)
sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

## 再安装 docker-ce 和 docker-ce-cli
sudo yum -y install docker-ce docker-ce-cli

1.5 开启 docker

sudo systemctl start docker

1.6 验证是否成功

docker run hello-world

1.7 使用阿里云镜像加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

# 1. 创建目录, 如果存在请忽略
sudo mkdir -p /etc/docker

# 2. 写入阿里云 registry
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["你的加速地址"]
}
EOF

# 3. 重启
sudo systemctl daemon-reload
sudo systemctl restart docker

1.8 免 sudo 使用 docker

当我们运行如 docker info 时, 会报如下错误(非 root 用户)

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/info: dial unix /var/run/docker.sock: connect: permission denied

原因:

Manage Docker as a non-root user

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.

If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

大意为: docker 进程使用 Unix Socket 而不是 TCP 端口。而默认情况下,Unix socket 属于 root 用户,需要 root 权限才能访问。

docker 守护进程启动的时候,会默认赋予名字为 docker 的用户组读写 Unix socket 的权限,因此只要创建 docker 用户组,并将当前用户加入到 docker 用户组中,那么当前用户就有权限访问 Unix socket 了,进而也就可以执行 docker 相关命令

解决办法

# 查看 docker 用户组是否已存在
sudo cat /etc/group | grep docker 

# 添加docker用户组, 如果 docker 用户组已存在, 则不需执行
sudo groupadd docker 

# 将登陆用户加入到 docker 用户组中, -a : append
sudo gpasswd -a $USER docker  

# 更新用户组
newgrp docker  

# 测试 docker 命令是否可以在无 sudo 时正常使用
docker info  

2. 通过安装包安装

  1. 通过 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 获取你需要的版本的 .rpm 安装包文件
  2. 安装
sudo yum install /path/to/package.rpm
  1. 运行 docker
sudo systemctl start docker
  1. 验证
sudo docker run hello-world

3. 通过安装脚本安装

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

docker uninstall/upgrade

# 卸载 docker
sudo yum remove docker-ce

# 删除 images/volumes/containers 等
sudo rm -rf /var/lib/docker

上面是官方文档的说法, 实际操作中,可能会出现 client 和 server 版本不一致的问题,可以先都删除掉

# 查找已安装的 docker 相关软件包
rpm -qa | grep docker

# 卸载列出的软件包
 sudo yum remove docker-ce-cli-19.03.0-3.el7.x86_64 docker-ce-19.03.0-3.el7.x86_64

 # 之后安装需要的版本即可
 sudo yum -y install docker-ce-18.09.8 docker-ce-cli-18.09.8 containerd.io

 # 安装完成后, 启动 docker
 sudo systemctl start docker

 # 启动所有容器
 docker restart $(docker ps -aq)

 # 检查容器状态!
 sudo systemctl status docker

附: docker clean

# 类似 linux 的 df, docker 会展示 docker 的磁盘使用情况
docker system df

# docker 的默认存盘目录一般在 /var/lib/docker 下, 可以进去看具体情况

# 该命令可以用来清理磁盘,删除关闭的容器,无用的 volume 和 network
# 包括 dangling(无 tag) 镜像 以及 cache
# 该命令还可以加 -a ,会把所有没有 container 关联的 image 都删掉,千万慎用!!!
docker system prune

v2ray & ss(vultr)

使用 vultr ecs 时,一般用来搭建自己的梯子,现在比较常用的有 v2ray & ss 。

可参考 github 上各类一键安装脚本。

NGINX

nginx 不在默认的 yum 源中,所以第一步加入

1. 安装

sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# 查看
sudo yum repolist | grep nginx
sudo yum -y install nginx


##### 如果是 centos 8,  可以直接安装!!!
sudo yum install nginx

2. 配置

设置开机自启动、启动 nginx

# 开机自启动
sudo systemctl enable nginx

# 启动服务
sudo systemctl start nginx

# 重启服务
sudo systemctl reload nginx

# 停止服务
sudo systemctl stop nginx

PostgreSQL 12

https://www.postgresql.org/download/linux/redhat/

1. 安装 pg12 rpm

这里需要注意的是,需要根据具体的版本来确定 rpm 源

我安装时,ceotos 版本是 7-x86_64 的

yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2. 安装客户端和服务端

# client
yum install postgresql12
# 服务端
yum install postgresql12-server

配置开机自启动等操作(Optional)

# 初始化 pgdb
/usr/pgsql-12/bin/postgresql-12-setup initdb
# 设置开机自启动
systemctl enable postgresql-12
# 开启 pgdb
systemctl start postgresql-12

初始账号密码及修改

postgres/postgres

修改配置前会遇到的问题及解答

可以通过修改配置完成:

vim /var/lib/pgsql/12/data/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer

# IPv4 local connections:
# old line -- dylan
#host    all             all             127.0.0.1/32            ident
# new line -- dylan
host    all             all             127.0.0.1/32            trust
host    all             all             all                     md5


# IPv6 local connections:
# old line -- dylan
# host    all             all             ::1/128                 ident


# Allow replication connections from localhost, by a user with the
# replication privilege.
# old lines -- dylan
#local   replication     all                                     peer
#host    replication     all             127.0.0.1/32            ident
#host    replication     all             ::1/128                 ident


# new lines -- dylan
host    replication     all             127.0.0.1/32            trust
host    replication     all             all                     md5

vim /var/lib/pgsql/12/data/postgresql.conf

# - Connection Settings -
# -- new line start -- dylan
listen_addresses = '*'
# -- new line end -- dylan


#listen_addresses = 'localhost'         # what IP address(es) to listen on;

远程连接

通过安装 pgAdmin4 连接

Java Install

Java 8

# 安装后 java & javac 都能正常使用
sudo yum install -y java-1.8.0-openjdk-devel.x86_64

# 安装后只有 java 能正常使用, javac 无用
sudo yum install -y java-1.8.0-openjdk.x86_64

Java 11

系统为 centOS 8, 其他系统未验证(如果失败,可以通过源码安装,配置环境变量)

sudo dnf install java-11-openjdk-devel

Redis 安装

在 centOS 8 下, 可直接使用:

sudo dnf install redis

当然,我们可以选择源码安装,我这里使用 5.0.8 版本

git clone https://github.com/antirez/redis.git --branch 5.0.8

下载完成后,进入目录,执行 make && make test

之后可能会遇到

You need tcl 8.5 or newer in order to run the Redis test

我们可以去 centos 官网,下载需要的依赖

sudo dnf install http://mirror.centos.org/centos-8/8.1.1911/BaseOS/x86_64/os/Packages/tcl-8.6.8-2.el8.x86_64.rpm

安装完成后再跑一次 make test ,ok ,完美

Golang Install

Golang 官方安装文档

如果有老版本,参考 remove old golang 先删除掉

Glang 1.13 Install

# 1. 下载
curl -O https://dl.google.com/go/go1.13.9.linux-amd64.tar.gz

# 解压
sudo tar -C /usr/local go1.13.9.linux-amd64.tar.gz

# path
## 1. 在 .bash_profile 中最后位置添加  export PATH=$PATH:/usr/local/go/bin (针对当前用户)
## 2. 保存后执行 source ~/.bash_profile
## 3. 如果使用的是 zsh , 需要在 ~/.zshrc 中配置  source ~/.bash_profile
## 或者直接在 /etc/profile 中配置, 在最末尾的位置追加 export PATH=$PATH:/usr/local/go/bin 即可(针对所有用户)

Golang 1.12 Install

如果你只想安装 1.12 (目前 yum 源还没有 1.13),可以直接通过 yum 安装

sudo yum -y install golang

VIM

用 vim 有一两年的历史,虽然现在只会一些常用的命令,各种骚操作基本不会,但在 Terminal 端操作时,还是能带来不少的便利。

常用的 vim plugin 管理工具,有 vundle 和 vim-plug

0. 卸载你的 vim 管理工具

rm -rf ~/.vim

# 在此之前, 你可能需要先备份你的 .vimrc 文件,如 cp .vimrm vimrm
rm .vimrc

1. 通过 vundle 管理 vim plugin

  • 通过 Vundle GitHub 中的步骤安装
  • 如果没有 .vimrc ,直接创建即可。
  • call vundle#begin()call vundle#end() 之间添加你需要的 vim plugin
  • 在最后添加各种插件的配置
  • 一个示例: vundle example

2. 通过 vim-plug 管理 vim plugin

可参考文章 vim-plug

4. vim 设置快捷键时候的坑

1. 设置快捷键的时候, 比如设置为 A-m , 即 Alt + m 键,可一直不起作用!!!遂放弃 Alt 。

这里 告诉你为什么

各种 Shift/Ctrl/Alt 对应如下:

vim keymap

2. YCM 需要 cmake

YCM 官方安装指南

cmake 安装指南

我是 centos 8, 通过 yum info cmake 看到 cmake 版本是 3.11.4 , 所以直接通过 yum 安装了。 同时要保证已经安装了 gcc ( sudo dnfinstall -y gcc-c++ )

3. tagbar

安装之前,要先安装 ctags: sudo yum install -y ctags

gradle install

1. 下载二进制文件

wget https://downloads.gradle-dn.com/distributions/gradle-7.0-bin.zip

2. 解压到指定文件

unzip -d /opt/gradle ./gradle-7.0-bin.zip

3. 设置环境变量

vim /etc/profile.d/gradle.sh

将如下内容写入:

export GRADLE_HOME=/opt/gradle/gradle-6.3
export PATH=${GRADLE_HOME}/bin:${PATH}

修改文件执行权限: chmod +x /etc/profile.d/gradle.sh

reload: source /etc/profile.d/gradle.sh

4. 查看版本

gradle -v

maven install

3.5 版本

在 centos8 下, 3.5 版本可通过 dnf install -y maven 直接安装

latest 版本

1. 从 maven 获取需要的版本

2.下载

wget https://www-us.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz -P /tmp

解压

tar -xvf ./apache-maven-3.6.3-bin.tar.gz -C /opt/maven

设置环境变量

tee /etc/profile.d/maven.sh <<-'EOF'
export M2_HOME=/opt/maven/apache-maven-3.6.3
export MAVEN_HOME=/opt/maven/apache-maven-3.6.3
export PATH=${M2_HOME}/bin:${PATH}
EOF

chmod +x /etc/profile.d/maven.sh 
source /etc/profile.d/maven.sh

验证

maven -v

小脚本

#!/usr/bin/env bash

set -eo pipefail

command=$1
param1=$2

function git_install() {
    yum -y update \
     && yum -y install git
}

function zsh_install() {
    git_install
    yum -y install zsh
}

function oh_my_zsh_install() {
    zsh_install
   sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
}

# install powerline if necessary
function powerline_install() {
   git clone https://github.com/powerline/fonts.git --depth=1 \
   && cd fonts \
   && ./install.sh \
   && cd .. \
   && rm -fr ./fonts
}

# add user
function add_user() {
    if [[ -z ${param1} ]]; then
       param1="dylan"
    fi
    adduser ${param1}
    passwd ${param1}
}

## generate ssh
function generate_ssh() {
    ssh-keygen -t rsa -C "peifeng"
    touch $HOME/.ssh/config
}


function docker_install() {
yum remove -y docker docker-common docker-selinux docker-engine \
&& yum install -y yum-utils device-mapper-persistent-data lvm2 \
&& yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo \
&& yum makecache fast \
&& yum -y install docker-ce

if [[ -z ${param1} ]]; then
    param1="https://docker.mirrors.ustc.edu.cn"
fi

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["${param1}"]
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

systemctl start docker
systemctl enable docker
}

function add_user_to_docker_group() {
    gpasswd -a ${USER} docker
    newgrp docker
}

function java_install() {
   yum install -y java-1.8.0-openjdk-devel.x86_64
}

function maven_install() {
    wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
    tar -zxvf apache-maven-3.6.1-bin.tar.gz
    sudo mv ./apache-maven-3.6.1 /usr/share/
    echo "export PATH=$PATH:/usr/share/apache-maven-3.6.1/bin" | sudo tee -a /etc/profile
    source /etc/profile
    mvn --version
}



function main() {
    usage="Usage: $0 (all|zsh|docker|java|maven)"
    echo ${usage}

    case ${command} in
    all)
         oh_my_zsh_install
         powerline_install
         generate_ssh
         add_user
         docker_install
         add_user_to_docker_group
         java_install
    ;;
    zsh)
        oh_my_zsh_install
    ;;
    docker)
        docker_install
    ;;
    java)
        java_install
    ;;
    maven)
        maven_install
     ;;
    *)
        echo "unsupported command yet"
        exit 0
    ;;
    esac
}

main

文章作者: peifeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 peifeng !
 上一篇
OAUTH2 Protocol OAUTH2 Protocol
oAuth 是一个关于授权的开放网络标准,它的第二个版本,我们称之为 oAuth2.0,常用于第三方授权。通俗来说,就是通过该协议,我们能拿到一个 token , 通过该 token,能访问到 token 授权范围内的资源。
2020-03-31
下一篇 
JAVA 排查姿势简介 JAVA 排查姿势简介
greys-anatomy 是一款很优秀的 java 诊断工具,由阿里的以为工程师开发维护,并开源到 github 上。阿里还开源了一款工具,名为 Arthas。对比来说, Arthas 比 greys 更为强大。本文以 greys 为主。
2020-03-24
  目录