Centos 下使用 Jvppeteer · fanyong920/jvppeteer Wiki (github.com)
error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
場景:
linux centos8.2服務(wù)器;
docker容器運行的微服務(wù)facereport;
微服務(wù)facereport中用了jvppeteer技術(shù)調(diào)用chrome截圖,如圖:

前端調(diào)用微服務(wù)后報錯,錯誤就是puppeteer啟動chrome失敗,說是加載共享庫時,找不到。
注:puppeteer是前端爬蟲工具,你可以理解為語法是js。 jvppeteer也是爬蟲工具,語法是java。
問題:
linux上,使用 jvppeteer 啟動chrome報錯:
2021-02-24 08:49:30.534 INFO 1 --- [-nio-93-exec-10] c.r.j.core.browser.BrowserFetcher:
revision:722234,
executablePath:/.local-browser/linux-722234/chrome-linux/chrome,
folderPath:/.local-browser/linux-722234,
local:true,
url:https://npm.taobao.org/mirrors/chromium-browser-snapshots/Linux_x64/722234/chrome-linux.zip,
product:chrome
com.ruiyun.jvppeteer.exception.TimeoutException: Timed out after 30000 ms while trying to connect to the browser!
Chrome output: /.local-browser/linux-722234/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
原因:
關(guān)鍵在于最后:
error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
找不到這個叫作 libXss.so.1 的依賴。
解決過程:
1.查找chrome安裝路徑:
find / -name chrome
[root@cumt chrome-linux]# find / -name chrome
find: ‘/proc/4138391’: No such file or directory
find: ‘/proc/4138392’: No such file or directory
/var/lib/selinux/targeted/active/modules/100/chrome
/var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/diff/.local-browser/linux-722234/chrome-linux/chrome
/var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/merged/.local-browser/linux-722234/chrome-linux/chrome
/usr/share/selinux/targeted/default/active/modules/100/chrome
2.查看缺少的依賴
cd /var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/merged/.local-browser/linux-722234/chrome-linux/
ldd chrome | grep not 查看缺少的依賴

3.安裝缺少的依賴
(1). error while loading shared libraries: libatk-bridge-2.0.so.0
解決:
yum install at-spi2-atk -y(2). error while loading shared libraries: libXss.so.1
解決:
yum install libXScrnSaver* -y(3). error while loading shared libraries: libgtk-3.so.0
解決:
yum install gtk3 -y(4). error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory
yum install nss(5).error while loading shared libraries: libasound.so.2: cannot open shared object file: No such file or directory
yum install alsa-lib其他缺少的依賴,到這查找
https://pkgs.org/search/?q=libasound.so.2

4.執(zhí)行
ldconfig刷新一下動態(tài)鏈接庫緩存。(此處參考:https://blog.csdn.net/sahusoft/article/details/7388617)5.測試:
執(zhí)行
./chrome,如果不報缺少xxx動態(tài)鏈接庫依賴的錯誤就是測試通過了,如圖:
它說的“Running as root without --no-sandbox is not supported”這玩意不用管,反正是不缺少依賴了,測試成功。
然后,我重新啟動微服務(wù)facereport。前端調(diào),還是報“error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory”坑啊。
針對上面的現(xiàn)象,想想:
首先,微服務(wù)是跑在docker里的,然后調(diào)用chrome的時候,需要下載chrome(因為上面代碼中有:BrowserFetcher.downloadIfNotExist(null);),下載的chrome是在這個路徑下:/var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/merged/.local-browser/linux-722234/chrome-linux/chrome
那么,我來到這個路徑下:cd /var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/merged并ls一下,發(fā)現(xiàn)是個虛擬機。沒錯,這是docker容器里的東西,docker這東西不就是個獨立的麻雀嘛,五臟俱全。chrome每次都是被程序裝到麻雀身體里的...怪不得它找不到我外面的鏈接庫。
解決辦法:把facereport從docker里挪出來啟動,直接用java -jar xxx 啟動。
測試成功,如圖:

要特別注意這個executablePath,這次程序把chrome給我安裝在了真正的服務(wù)器上,而不是docker的虛擬機里。