文章目錄
- 前言
- 正文
- 后記
前言
想著搭建一個 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語言環境安裝以及程式如何運行
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/387132.html
標籤:其他
