想着搭建一个 wiki,将自己本地的 md 都上传到服务器上,来实现远程办公,一切工作平板化,那自然是说干就干;
首选的是 mindoc,因为之前学长也有用过,感觉还可以,事实证明,只是感觉罢了,为了安装这个 mindoc,使得我整个服务器回滚,大无语!
接下来就唠嗑唠嗑;
mindoc 是国内开源的 wiki,因此直接进到 github 上看,https://github.com/mindoc-org/mindoc,
其实开发文档也给了注意,我的服务器恰巧就是 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语言环境安装以及程序如何运行