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容器運(yùn)行的微服務(wù)facereport泰佳;
微服務(wù)facereport中用了jvppeteer技術(shù)調(diào)用chrome截圖盼砍,如圖:
前端調(diào)用微服務(wù)后報(bào)錯(cuò),錯(cuò)誤就是puppeteer啟動(dòng)chrome失敗逝她,說是加載共享庫時(shí)浇坐,找不到。
注:puppeteer是前端爬蟲工具黔宛,你可以理解為語法是js近刘。 jvppeteer也是爬蟲工具,語法是java宁昭。
問題:
linux上跌宛,使用 jvppeteer 啟動(dòng)chrome報(bào)錯(cuò):
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
找不到這個(gè)叫作 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
刷新一下動(dòng)態(tài)鏈接庫緩存回右。(此處參考:https://blog.csdn.net/sahusoft/article/details/7388617)5.測試:
執(zhí)行
./chrome
隆圆,如果不報(bào)缺少xxx動(dòng)態(tài)鏈接庫依賴的錯(cuò)誤就是測試通過了,如圖:它說的“Running as root without --no-sandbox is not supported”這玩意不用管翔烁,反正是不缺少依賴了渺氧,測試成功。
然后蹬屹,我重新啟動(dòng)微服務(wù)facereport侣背。前端調(diào),還是報(bà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的時(shí)候潮太,需要下載chrome(因?yàn)樯厦娲a中有:BrowserFetcher.downloadIfNotExist(null);
),下載的chrome是在這個(gè)路徑下:/var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/merged/.local-browser/linux-722234/chrome-linux/chrome
那么,我來到這個(gè)路徑下:cd /var/lib/docker/overlay2/562dbdf18ef7e71663da04c38e7108e4dbd1d9fab3dedc32d7d16d6624b2c08e/merged
并ls
一下铡买,發(fā)現(xiàn)是個(gè)虛擬機(jī)更鲁。沒錯(cuò),這是docker容器里的東西奇钞,docker這東西不就是個(gè)獨(dú)立的麻雀嘛澡为,五臟俱全。chrome每次都是被程序裝到麻雀身體里的...怪不得它找不到我外面的鏈接庫蛇券。
解決辦法:把facereport從docker里挪出來啟動(dòng)缀壤,直接用java -jar xxx 啟動(dòng)。
測試成功纠亚,如圖:
要特別注意這個(gè)executablePath塘慕,這次程序把chrome給我安裝在了真正的服務(wù)器上,而不是docker的虛擬機(jī)里蒂胞。