[Linux] 从零开始配置openEuler/EulerOS下的 C/C++开发环境: zsh安装、nvim的LSP-C/C++补全、MySQL57安装配置
Table of Contents

裂!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一个不小心rm -rf /了!!!!!

用户数据、配置全没了, 我裂了个大裂!!!!!

既然全没了, 东西也没有很多, 不如直接重装系统, 从零开始配置一下

所以, 决定写一篇文章, 记录一下重新配置的过程/(ㄒoㄒ)/~~


以下均在openEuler22.02 STL环境下执行

如果是EulerOS, 会有很多软件已经预装好了, 已经装好的软件不用再安装, 只需要安装没有的软件就行

先不添加用户, 在root下配置好环境再说

所需软件安装 Link to 所需软件安装

可以直接dnf命令安装的 Link to 可以直接 dnf 命令安装的

openEuler的官方库维护的挺好的, 至少对国内的用户来说

本篇文章, 所配置的开发环境, 大部分所需要的软件都可以直接通过dnf命令安装, mostnvim除外

直接用dnf将大部分软件安装好

BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 直接在命令行执行就好
dnf -y install g++ gdb git man-pages man-pages-help zsh wget unzip jsoncpp-devel tree

# 你也可以单独安装:
# dnf install g++: g++, openEuler默认安装有gcc, 没有g++
# dnf install gdb: gdb, 调试用
# dnf install git: git, 很重要, 后面配置 基本都要用到
# dnf install man-pages man-pages-help: man-pages 和 man-pages-help, openEuler man手册不完整, 所以需要补充完整
# dnf install zsh: zsh, 博主用的shell
# dnf install wget: wget, 获取网络资源的工具
# dnf install unzip: unzip, 后面nvim配置需要用到的解压工具
# dnf install jsoncpp-devel: jsoncpp-devel, 懂得都懂(只是一个cpp用的json包)
# dnf install tree: tree, 可以以树形结构输出目录结构
# dnf不仅会安装这些东西, 还会自动安装一些前置库等

还有mostnvim没有安装, 官方的dnf源没有most, nvim我更习惯手动安装

most Link to most

most是一个分页工具, 我安装是为了让man手册有颜色, 有重点

openEulerdnf没有most的下载源, 所以找一个在rpmifnd找了一个rpm:

SHELL
1
2
3
4
5
wget https://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/m/most-5.1.0-6.el8.x86_64.rpm
# 下载完之后

# 安装
sudo rpm -ivh most-5.1.0-6.el8.x86_64.rpm

nvim Link to nvim

neovim的安装也比较方便

nvimgithub, https://github.com/neovim/neovim/tree/master找最新release下载, 或者直接执行下面的命令:

SHELL
1
wget https://github.com/neovim/neovim/releases/download/v0.10.1/nvim-linux64.tar.gz

这里下载的是, 配置时的最新release

SHELL
1
2
3
4
5
6
7
8
# 下载完成之后 解压
tar -xvf nvim-linux64.tar.gz

# 解压完成之后, 安装一下 实际就是移到一个你了解的 软件安装路径下
# 不太了解的 就直接按照下面的命令执行, /usr/local 本来就是安装软件的地方
mv nvim-linux64 /usr/local/nvim
# 给nvim建立软连接
ln -s /usr/local/nvim/bin/nvim /usr/local/bin/nvim

然后, 添加nvimpython3的支持:

SHELL
1
2
3
4
5
6
7
8
9
# 直接在命令行执行
pip3 install pynvim


# 如果提示没有pip3命令, 就需要安装pip3
# 可以先看看python3有没有安装
dnf install python3
# 再安装pip3
dnf install python3-pip

正常情况下, 等一会就成功安装了

配置软件 Link to 配置软件

git Link to git

设置git的一些config

SHELL
1
2
3
4
5
6
7
# 一样的 安装完之后直接 再命令行执行就好
git config --global user.name ""
git config --global user.email ""
git config --global core.editor nvim

# 生成ssh密钥和公钥 为了在有用的地方使用
ssh-keygen -t rsa -b 4096 -C "email"

除了设置user.nameuser.email之外, 还要设置一下git默认的编辑工具

因为我个人用的neovim, 所以设置为nvim

zsh Link to zsh

已经安装了zsh, 就可以改用户的shell:

BASH
1
2
3
4
5
# openEuler
chsh -s /bin/zsh username

# EulerOS, 应该是没有chsh
usermode -s /bin/zsh username

安装oh-my-zshp10k, 强化一下zsh:

SHELL
1
2
3
4
5
6
7
8
9
10
11
12
13
# 直接在命令行执行
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 上面的命令成功之后, 再执行下面的命令
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

# 两条指令都成功之后, 打开 ~/.zshrc
vim ~/.zshrc
# 找到 ZSH_THEME的一行, 改成下面的的内容
ZSH_THEME="powerlevel10k/powerlevel10k"
# 然后输入 :wq 回车, 保存退出
# 再在命令行执行
source ~/.zshrc

完成之后, 按照引导 和 喜好配置p10k就可以了

我个人配置完之后, 是这样的:

然后安装oh-my-zsh, 我个人认为最重要的两个插件:

SHELL
1
2
3
4
# 一句一句在命令行执行
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

两个插件都git clone之后, 可以在~/.oh-my-zsh/custom/plugins路径下查看他们

然后nvim ~/.zshrc, 找到plugins=(git)的一行

在其中添加zsh-autosuggestionszsh-syntax-highlighting:

plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

保存退出

在命令行执行source ~/.zshrc, 常用项配置结束


下面是博主个人习惯在~/.zshrc中添加的配置:

SHELL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 防止 rm 直接将文件删掉, 所以将 rm定义成一个函数, 起到 mv -t 的作用
rm() {
    if [[ $1 == "-rf" ]]; then
        shift
        mv -t ~/.delete/. "$@"
    else
        mv -t ~/.delete/. "$@"
    fi

    echo "成功将文件移动到 ~/.delete, 请注意清理"
}
# 方便打开多个文件, 一起加载到nvim的bufferline插件里
alias nvim="nvim -p"
alias vim="nvim -p"
# cat, t 太远了, 而且 cat查看文件内容默认的Tab长度是8, 这里改成cas 并以Tab 为4查看
alias cas="expand -t 4 | cat"
# 下面是 pigcha jia速qi 的配置
alias pig="pigchacli"
alias unsetpig="unset https_proxy http_proxy && git config --global --unset https.proxy && git config --global --unset http.proxy"
alias setpig="export https_proxy=http://127.0.0.1:15777 http_proxy=http://127.0.0.1:15777 && git config --global http.proxy http://127.0.0.1:15777 && git config --global https.proxy http://127.0.0.1:15777"

因为在.zshrc中, 把rm定义成了一个函数

所以, 原本的rm就没有办法正常执行了

所以, 要给原本的rm建立一个软连接

在命令行执行:

ln -s /usr/bin/rm /usr/bin/rlrm

之后, 执行rlrm(realrm)就是原本的rm

man Link to man

openEulerman但是看不了, 所以在上面安装了man-pages man-pages-help

但是这样的man只是黑白的, 所以还安装了most分页工具

然后在~/.zshrc中添加环境变量: export PAGER=most

之后再用man就可以看到彩色的了, 虽然也并不是很彩, 但至少是有重点了:

neovim Link to neovim

neovim的配置比较方便, 因为博主自己有自用的配置在github


不同用户, 软件的配置是不互通的

所以, 此时在root用户下配置, 之后创建新用户需要重新配置, nvimzsh都是如此

进入~/.config, 如果没有可以创建一个:

SHELL
1
2
3
4
5
6
7
8
9
10
11
12
# 如果没有, 就先执行这个
mkdir ~/.config

# 然后
cd ~/.config

# 然后, 把github上的nvim配置clone下来
git clone https://github.com/humid1ch/nvim.git

# 或者可以登录网页, 直接赋值init.lua的内容
# 在 ~/.config 下创建一个 nvim目录
# 再在 nvim目录下创建一个init.lua, 把内容复制进去就可以了

有了init.lua配置文件之后, 再打开nvim 就会自动下载、安装、配置nvim

这个过程最好要保证 “相信科学, 网络通畅”

不然, 很可能某些插件会安装失败, 不过安装失败也不要紧

如果某些插件安装失败了, 可以打开nvim:

command模式下输入:Lazy回车, 就会打开插件的配置界面:

你可以按S对所有插件重新刷新, 安装

直到所有插件完整的安装完毕


然后就可以安装lsp

依旧是在command模式下:

博主只需要使用C/C++的相关功能, 所以就安装clangdclang-format

:MasonInstall lua-language-server clangd clang-format回车 (在之后加@可以选择版本)

等待安装完成之后, nvim就可以实现C/C++的补全了:

这里边都是各种语言的LSP

愉快 愉快~

gdb Link to gdb

gdb是用来调试C/C++程序的, 不过在实际调试时, 会出现一些提示, 说调试信息缺失什么的

然后会有一句提示大概是:

SHELL
1
dnf debuginfo-install libgcc-xxxxxxx.x86_64 libstdc++-xxxxxxx.x86_64

是让你安装gcc/g++对应版本的一些gdb需要的调试信息的

所以直接复制提示的版本安装就可以了:

SHELL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dnf debuginfo-install libgcc-xxxxxxx.x86_64 libstdc++-xxxxxxx.x86_64

# EulerOS 可能会关闭dnf或yum的 debuginfo
# 所以需要手动打开, 然后再安装
# 这里以openEuler22.03 STL为演示打开yum的debufinfo, 然后在使用yum安装对应的调试信息
cd /etc/yum.repos.d
# 然后编辑里边的文件
vim xxxxxx.conf
# 找到 [debuginfo]
# 将所属的enable=0, 改成enable=1
enable=1
# :wq写入退出

# 然后使用yum安装就可以了
yum debuginfo-install libgcc-xxxxxxx.x86_64 libstdc++-xxxxxxx.x86_64

这里需要libgcclibstdc++都要安装, 不然nvim-lsp会出现bug, 无法对其中一种语言实现补全

大功告成~

MySQL57 的安装 Link to MySQL57 的安装

安装MySQL5.7:

SHELL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# EulerOS 默认是不安装MySQL的
# dnf和yum默认安装的不是5.7
# 所以要添加源

# 下载源
wget https://repo.mysql.com/mysql57-community-release-el7.rpm
# 导入源
rpm -Uvh mysql57-community-release-el7.rpm
# 查看源
yum list |grep mysql
# 导入2022密钥 就得是2022的, 新的不行 旧的也不行
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 最好在 /etc/yum.repos.d/mysql-community.repo 文件的 mysql57-community 的 gpgkey也设置一下
gpgkey=https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装mysql57
yum install -y mysql-community-server
# 等待完成就可以了

# 还要安装一下 mysql57的C语言开发库
yum install mariadb-devel
# 一般上边的源配置好之后 此时就是 mysql57的库

安装MySQL之后, 还要配置一下/etc/my.cnf

PLAINTEXT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

# 新增
[mysql]
default-character-set=utf8

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 新增
default-storage-engine=innodb
character_set_server=utf8
collation-server = utf8_general_ci
sql-mode = TRADITIONAL
init-connect = 'SET NAMES utf8'

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

然后启动mysql:

systemctl start mysqld

启动之后, 先获取临时密码, 然后登录:

SHELL
1
2
3
4
5
grep 'temporary password' /var/log/mysqld.log
# 输出 A temporary password is generated for root@localhost: xxxxxxxxx
# 然后登录
mysql -uroot -p
# 输入 刚刚输出在屏上的密码

登录之后, 需要修改密码, 才能执行命令:

PLAINTEXT
1
2
SET PASSWORD = PASSWORD("new password");
# new password 改成 想要设置的密码就好了

还可以设置开机自启:

SHELL
1
2
systemctl enable mysqld
systemctl daemon-reload

添加用户 Link to 添加用户

SHELL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 添加用户, 并同时创建用户目录
useradd -m username

# 将用户添加到wheel组
usermod -a -G wheel username
# 执行之后, user就至少有了两个用户组: username和wheel

# 添加新用户的 sudo权限
nvim /etc/sudoers
# 在 root	ALL=(ALL)	ALL 下一行
# 添加 username	ALL=(ALL)	ALL

# 然后给用户设置新密码
passwd username

# 再更改新用户的shell 为 zsh
usermode -s /bin/zsh username
# 通过openEuler的dnf安装的zsh应该就在/bin/zsh下
# 否则你可以查看 /etc/shells 的内容, 找一下zsh

然后就可以用新用户登录系统了

然后可以重新参考上面的配置zsh配置nvim将两个软件配置一下

不用再安装zshnvim, 因为已经安装过了

只需要配置一下

Thanks for reading!

[Linux] 从零开始配置openEuler/EulerOS下的 C/C++开发环境: zsh安装、nvim的LSP-C/C++补全、MySQL57安装配置

Thu Aug 08 2024
2940 字 · 16 分钟