公司有個項目要實現一個word文檔預覽的功能茄猫,經過一番調用后最終確定了兩個組件Libreoffice和OpenOffice碍庵,經過對比后感覺libreOffice更成熟一點熬丧。當時估計這個小功能抽米,一上午就搞定了狞谱,但最終花了3天才搞定,特意記錄下踩坑過程免糕,以供后人參考赢乓。
當時為啥這么樂觀?
看看LibreOffice的官網石窑,有現成的deb安裝包(麒麟系統(tǒng)和Ubuntu類似)牌芋,只要下載下來拷貝到服務器上只要簡單的執(zhí)行下 sudo dpkg -i *.deb 命令就搞定了。
悲催的一天
第二天上午一邊喝著咖啡松逊,一邊準備安裝了躺屁,安裝的過程閉著眼都能完成 ,先用tar解壓经宏,然后dpkg 安裝犀暑,但當按下回車鍵的時候才意識到忽略了一個重要的點,忘記看服務器是什么架構了烁兰,果然屏幕上提示:
軟件包體系架構(amd64)與本機系統(tǒng)體系結構(arm64)不符dpkg: 處理歸檔 libreoffice6.3-en-us_6.3.4.2-2_amd64.deb (--install)時出錯:軟件包體系架構(amd64)與本機系統(tǒng)體系結構(arm64)不符dpkg: 處理歸檔 libreoffice6.3-impress_6.3.4.2-2_amd64.deb (--install)時出錯:軟件包體系架構(amd64)與本機系統(tǒng)體系結構(arm64)不符
從服務器上下載的是amd架構的耐亏,而麒麟服務器是arm架構的,而官網沒有提供安裝包沪斟,因為服務不能上網广辰,所以沒法用apt install這樣的命令,看來只能通過源碼編譯了主之。編譯的過程是痛苦的择吊,依賴這個軟件依賴的包太多了
一直搞到下班也沒把依賴包找全,感覺此路不通槽奕,源碼編譯的方案不可行
又是忙碌的一天
既然源碼編譯不可行干发,那么通過去deb鏡像上把所有這些安裝的依賴包及LibreOffice包全部下載下來再安裝,感覺這個方案可行史翘,說干就干枉长,依賴包有幾百個,估計的下載到明年啦琼讽,程序員嗎怎么可能那么傻必峰,寫個下載包的工具下載吧,經過一上午的折騰終于包300個相關版本的包都下載下來了钻蹬,又是一邊喝著咖啡吼蚁,一邊敲入dpkg命令,然后令人沮喪的事又出現了,滿屏幕都是找不到依賴錯誤肝匆。完了此路又不通粒蜈。
https://packages.debian.org/sid/libreoffice
終于安裝成功了
仔細想想感覺還是對這個Ubuntu系統(tǒng)不熟悉,以前都是用Centos的旗国,這么搞的話完全是蠻力枯怖,太費勁了。仔細考慮了能曾,感覺太太傻了度硝,完全可以搞一臺能上網的機器,只要這個機器的架構和系統(tǒng)都和服務器一樣不就行了寿冕,然后簡單的用apt命令就能把依賴包都下載到本地緩存中
-d參數只下載依賴包但不安裝蕊程,會下載到/var/cache/apt/archives下面
/apt/archivesapt install libreoffice -d
但是新的問題又出現了,默認鏡像地址都是國外的驼唱,索引速度奇慢藻茂,而且有的地址還被和諧了,所以只能編輯了鏡像源文件玫恳,修改成阿里或163的鏡像
vi /etc/apt/sources.list
在文件中加入
# https://opsx.alibaba.com/mirrordeb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
然后執(zhí)行更新索引
apt update
但還是提示無法更新arm包索引辨赐,這就不對了,大家都可以纽窟,為啥我這就不行了肖油,肯定哪里出問題了兼吓,仔細查看了錯誤信息臂港,有一部分索引更新成功了,但就是arm索引更新不了视搏,那只有一種可能了审孽,就是上面的鏡像地址里沒有arm的鏡像地址經過一番百度后,終于在某篇文章里找到了答案浑娜,arm架構下鏡像要將ubuntu改成ubuntu-ports即可佑力,然后再次更新索引成功了
ubuntu 16.04 配置如下deb http://mirrors.aliyun.com/ubuntu-ports/ xenial maindeb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial main?deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates maindeb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates main?deb http://mirrors.aliyun.com/ubuntu-ports/ xenial universedeb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial universedeb http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates universedeb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-updates universe?deb http://mirrors.aliyun.com/ubuntu-ports/ xenial-security maindeb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-security maindeb http://mirrors.aliyun.com/ubuntu-ports/ xenial-security universedeb-src http://mirrors.aliyun.com/ubuntu-ports/ xenial-security universe
剩下就不用說了,順利的將deb包下載到了apt緩存目錄下筋遭,然后用u盤拷貝到服務器上再次執(zhí)行dpkg命令成功安裝上了libreoffice打颤,這個過程也可能會提示依賴問題,需要執(zhí)行以下 sudo apt install -f -y 命令解決下依賴
如果安裝成功漓滔,會安裝到 /usr/lib/libreoffice目錄下编饺,轉換一個文檔試試
#windows
soffice.exe --headless --invisible --convert-to pdf e:\tmp\123.docx --outdir e:\tmp
?linux
/usr/bin/libreoffice6.3 --headless --invisible --convert-to pdf /tmp/123.docx --outdir /tmp
終極解決方案
另一種更簡單的解決方案,我想聰明的小伙伴响驴,一定想到了透且,那就是docker
先在能上網的機器上制造鏡像文件:
首先先編寫一個Dockerfile文件,例如:
FROM ubuntu16.04
...
RUN apt-get install -y libreoffice
....
編譯
docker build -t libreoffice:6.3
查看鏡像
docker images
導出鏡像
docker save 38463a656de8> /root/libreoffice.tar
在無網服務器上導入鏡像
docker load < /root/libreoffice.tar
啟動docker
docker run --name libreoffice -v /opt/libreoffice/data:/opt/data -p 8089:8089 -d? libreoffice:6.3?
一些思考
在項目開發(fā)過程中不能忽略任何細節(jié)豁鲤,否則會造成盲目的樂觀秽誊,造成項目延時鲸沮;還有就是不能埋頭把所有方案都試一遍,雖然最終找到了一個解決方案锅论,但中間過程肯定耗費不少時間讼溺,所以遇到問題一開始就要把所有解決方案都列舉出來,綜合比較后選擇一個性價比最高的方案棍厌。