linux上,使用 jvppeteer 啟動chrome報錯:缺少 libXss.so.1

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截圖,如圖:


image.png

前端調(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 查看缺少的依賴

image.png

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
image.png

4.執(zhí)行ldconfig刷新一下動態(tài)鏈接庫緩存。(此處參考:https://blog.csdn.net/sahusoft/article/details/7388617
5.測試:
執(zhí)行./chrome,如果不報缺少xxx動態(tài)鏈接庫依賴的錯誤就是測試通過了,如圖:
image.png

它說的“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/mergedls一下,發(fā)現(xiàn)是個虛擬機。沒錯,這是docker容器里的東西,docker這東西不就是個獨立的麻雀嘛,五臟俱全。chrome每次都是被程序裝到麻雀身體里的...怪不得它找不到我外面的鏈接庫。

解決辦法:把facereport從docker里挪出來啟動,直接用java -jar xxx 啟動。

測試成功,如圖:


image.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容