【复】一次搭建 wiki 的悲惨经历

文章目录

  • 前言
  • 正文
  • 后记

前言

想着搭建一个 wiki,将自己本地的 md 都上传到服务器上,来实现远程办公,一切工作平板化,那自然是说干就干;

首选的是 mindoc,因为之前学长也有用过,感觉还可以,事实证明,只是感觉罢了,为了安装这个 mindoc,使得我整个服务器回滚,大无语!

接下来就唠嗑唠嗑;

 

正文

mindoc 是国内开源的 wiki,因此直接进到 github 上看,https://github.com/mindoc-org/mindoc,

【复】一次搭建 wiki 的悲惨经历_第1张图片

其实开发文档也给了注意,我的服务器恰巧就是 CentOS7…,稳重起见,事先也查了关于 CentOS 安装 mindoc 的资料,看着大家都能成功搭建,我也就头铁硬上了;

好家伙,不负所望,报错了,version GLIBC_2.28 not found (required by ./mindoc_linux_amd64)这也是悲剧开始的地方

少了个 GLIBC_2.28,那咱就安呗,即使在文献检索的时候也有看到有风险要慎重,但当时没有在意,头铁直接上了,好家伙,搞到一半直接被拒绝远程连接了,又无法对这段进行回滚,只能通过以前的快照回滚了

这一回滚,就只剩点基础环境了,真是令人悲伤;

然鹅事情还没结束,

回滚重新配环境这会,我又了解到了一个新东西,glibc-all-in-one ,涵盖了大量的 GLibC,直接 down 就好了;

参考这篇博文的安装教程,以下就简述执行代码:

git clone https://github.com/matrix1001/glibc-all-in-one

# 然后进入 glibc-all-in-one 的文件夹
cd glibc-all-in-one

# 进入文件夹后,执行 update_list,然后会在文件夹内出现 list 和 old_list 两个文件
# 查看两个文件
cat list
# cat old_list

# 输出的内容为可供下载的 glibc 版本
# 执行 download 或者 download_old (具体执行哪个看是在 list 中还是在 list_old 中)
./download xxx

# 下载完以后会出现一个 libs 文件夹,里面存放的就是下载的 glibc 文件夹

这时候就需要另一个工具配合了,patchelf

git clone https://github.com/NixOS/patchelf

cd patchelf

# 执行以下代码
./bootstrap.sh
./configure
make
sudo make install
make check

然后运行下述命令来更改文件的 GLibC:

# patchelf --set-interpreter [你下载的glibc目录下ld文件] --set-rpath [libc的目录] [需要更改的文件]
patchelf —-set-interpreter ~/glibc-all-in-one/libs/2.28-0ubutu11.3_amd64/ld-2.28.so —-set-rpath ~/glibc-all-in-one/libs/2.28-0ubutu11.3_amd64 ‘/home/mindoc/mindoc_linux_amd64’

这时我报了一个错误:

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 

这是因为在这之前我把 gcc 升到了 9.1,但是我并没有更换动态库,才导致的这个问题,说到这个,我安装 gcc9.1 花了一个半小时,却没有用上,难受;

解决方法如下:

# 查找编译 gcc 时生成的最新动态库
find / -name "libstdc++.so*"

# 输出如下(gcc-build 是输出目录,安装时自定义的目录)
/home/gcc-9.1/gcc-build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/home/gcc-9.1/gcc-build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/home/gcc-9.1/gcc-build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28  # 最新动态库
…
…

# 将上面的最新动态库 libstdc++.so.6.0.28 复制到 /usr/lib64 目录下:
cp /home/gcc-9.1/gcc-build/stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.28 /usr/lib64

# 接下来重建默认库的软连接
cd /usr/lib64
rm -rf libstdc++.so.6
ln -s libstdc++.so.6.0.28 libstdc++.so.6

# 默认动态库升级完成,运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

来对比一下更改 GLibC 文件前后状态:

更改前

在这里插入图片描述

更改后

在这里插入图片描述

写到这的时候,我才发现我 interpreter 了别的文件,这可能就是导致我最后在初始化 mindoc 的数据库时,出现了段错误;

在查找这个段错误的时候,突然找到了 CentOS 安装 Golang 的姿势,就安装上了 Go,操作如下:

# 版本号根据官网自行修改
# Golang 官网:https://golang.google.cn

wget https://golang.org/dl/go1.15.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.15.2.linux-amd64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' > /etc/profile.d/golang.sh
source /etc/profile.d/golang.sh

检验一下是否安装成功了:

go version
go version go1.15.2 linux/amd64

参考教程:https://www.daniao.org/5094.html

装完 Go 之后,跟着 mindoc 的开发文档装就完事了…

# 克隆源码
git clone https://github.com/mindoc-org/mindoc.git

# 进入解压目录 cd
# go包安装
go mod tidy

# 编译(sqlite需要CGO支持)
go build -ldflags "-w"

# 数据库初始化(此步骤执行之前,需配置`conf/app.conf`)
./mindoc install

# 执行
./mindoc

别忘了配置 app.conf,配个数据库就好了,想改端口的把 port 改一下,同时要把防火墙的端口设置一下~

嗯,就这样十分钟能解决的事情,搞了我一天‍,还让服务器回滚了
 

后记

等我安装完 mindoc 后,学长跟我说 mindoc 不好用,现在转飞书了;
我:???

参考文献

1、如何更改linux内程序的glibc文件
2、解决类似 /usr/lib64/libstdc++.so.6: version GLIBCXX_3.4.21 not found 的问题
3、宝塔面板Linux环境-安装Golang:Go语言环境安装以及程序如何运行

你可能感兴趣的:(复盘)