大家好,关于克隆网站源码分享果6带很多朋友都还不太明白,今天小编就来为大家分享关于克隆网站赚钱的知识,希望对各位有所帮助!
LibreOffice是由文档基金会开发的自由及开放源代码的办公室套件。LibreOffice套件包含文字处理器、电子表格、演示文稿程序、矢量图形编辑器和图表工具、数据库管理程序及创建和编辑数学公式的应用程序。借助LibreOffice的命令行接口可以方便地将office文件转换成pdf。如下所示:
$soffice–convert-topdf–outdir/tmp/tmp/test.doc\n
一个完整版本的LibreOffice大小为2GB,而函数计算运行时缓存目录/tmp空间限制为512M,zip程序包大小限制为50M。好在社区已经有项目aws-lambda-libreoffice成功的将libreoffice移植到AWSLambda平台,基于前人的方法和经验,本人创建了fc-libreoffice项目,使libreoffice成功的运行在阿里云函数计算平台。fc-libreoffice在aws-lambda-libreoffice的基础上解决了如下问题:
重新编译和裁剪libreoffice,使其适配FCnodejs8runtime内置的gcc和内核版本;安装运行时缺失的libssl3依赖;借助OSS运行时下载解压,以绕过zip程序包50M的限制;制作了一个example项目,支持一键部署,快速体验。
本文侧重于记述整个移植过程,记录关键步骤以备忘,也为类似的转换工具移植到函数计算平台提供参考。如果您对于如何快速搭建一个廉价且可扩展的word转换pdf云服务更感兴趣,可以阅读另一篇文章《五分钟上线——函数计算Word转PDF云服务》。
准备工作
在开始之前建议找一个台配置较好的Debain/Ubuntu机器,libreoffice编译比较消耗计算资源。并在机器上安装和配置如下工具:
docker-ce安装方法参考官方安装文档fun一款函数计算的编排工具,用于快速部署函数计算应用。MacOS平台可以使用如下方法安装
brewtapvangie/formula\nbrewinstallfun\n
其他平台可以通过npm安装
npminstall@alicloud/fun-g\n
ossutiloss的命令行工具。将其下载并放置到$PATH所在目录。
编译libreoffice
我们会采用fc-docker提供的aliyunfc/runtime-nodejs8:builddocker镜像进行编译。fc-docker提供了一系列的docker镜像,这些docker镜像环境非常接近函数计算的真实环境。因为我们打算把libreoffice跑在nodejs8环境中,所以我们选用了aliyunfc/runtime-nodejs8:build,build标签镜像相比于其他镜像会多一些构建需要的基础包。
启动一个编译环境
通过如下命令可启动一个用于构建libreoffice的容器。
dockerrun–namelibre-builder–rm-v$(pwd):/code-d-t–cap-add=SYS_PTRACE–security-optseccomp=unconfinedaliyunfc/runtime-nodejs8:buildbash\n
上面的命令,我们启动了一个名为libre-builder的容器并把当前目录挂载到容器内文件系统的/code目录。附加参数–cap-add=SYS_PTRACE–security-optseccomp=unconfined是cpp程序编译需要的,否则会报出一些警告。-d表示以后台daemon的方式启动。-t表示启动tty,配合后面的bash命令是为了卡主容器不退出。而–rm表示一旦容器停止了就自动删除容器。
安装编译工具
接下来进入容器安装编译工具
apt-getinstall-yccache\napt-getbuild-dep-ylibreoffice\n
ccache是一个编译工具,可以加速gcc对同一个程序的多次编译。尽管第一次编译会花费长一点的时间,有了ccache,后续的编译将变得非常非常快。
apt-get的build-dep子命令会建立某个要编译软件的环境。具体行为就是把所有依赖的工具和软件包都安装上。
克隆源码
gitclone–depth=1git://anongit.freedesktop.org/libreoffice/corelibreoffice\ncdlibreoffice\n
记得加上–depth=1参数,因为libreoffice项目比较大,进行全量克隆会比较费时间,对于编译来说git提交历史没有意义。
配置并编译
themostimportantpart.Run./autogen.sh–helptoseewhaeachoptionmeans\n./autogen.sh–disable-report-builder–disable-lpsolve–disable-coinmp\\\n–enable-mergelibs–disable-odk–disable-gtk–disable-cairo-canvas\\\n–disable-dbus–disable-sdremote–disable-sdremote-bluetooth–disable-gio–disable-randr\\\n–disable-gstreamer-1-0–disable-cve-tests–disable-cups–disable-extension-update\\\n–disable-postgresql-sdbc–disable-lotuswordpro–disable-firebird-sdbc–disable-scripting-beanshell\\\n–disable-scripting-javascript–disable-largefile–without-helppack-integration\\\n–without-system-dicts–without-java–disable-gtk3–disable-dconf–disable-gstreamer-0-10\\\n–disable-firebird-sdbc–without-fonts–without-junit–with-theme=”no”–disable-evolution2\\\n–disable-avahi–without-myspell-dicts–with-galleries=”no”\\\n–disable-kde4–with-system-expat–with-system-libxml–with-system-nss\\\n–disable-introspection–without-krb5–disable-python–disable-pch\\\n–with-system-openssl–with-system-curl–disable-ooenv–disable-dependency-tracking\n
开始编译
make\n
最终的编译结果位于./instdir/目录下。
精简尺寸
使用strip命令去除二进制文件中的符号信息和编译信息
removeunneededstuffforheadlessmode\nrm-rf./instdir/share/gallery\\\n./instdir/share/config/images_*.zip\\\n./instdir/readmes\\\n./instdir/CREDITS.fodt\\\n./instdir/LICENSE*\\\n./instdir/NOTICE\n
验证
使用如下命令,测试一下编译出来的soffice是否能正常将txt文件转换成pdf文件。
echo”helloworld”>a.txt\n./instdir/program/soffice–headless–invisible–nodefault–nofirststartwizard\\\n–nolockcheck–nologo–norestore–convert-topdf–outdir$(pwd)a.txt\n
打包
servicename\nType:’Aliyun::Serverless::Service’\nProperties:\nDescription:’fctest’\nPolicies:\n-AliyunOSSFullAccess\nlibre-fun:#functionname\nType:’Aliyun::Serverless::Function’\nProperties:\nHandler:index.handler\nInitializer:index.initializer\nRuntime:nodejs8\nCodeUri:’./’\nTimeout:60\nMemorySize:640\nEnvironmentVariables:\nALIBABA_CLOUD_DEFAULT_REGION:${ALIBABA_CLOUD_DEFAULT_REGION}\nOSS_BUCKET:${OSS_BUCKET}\nOSS_INTERNAL:’true’\n
真实场景下,把秘钥和一起变量写在template.yml里并不合适。为了做到代码和配置相分离,上面使用了变量占位符${ALIBABA_CLOUD_DEFAULT_REGION}和${OSS_BUCKET}。
然后使用envsubst进行替换
SCRIPT_DIR=`dirname–“$0″`\nsource$SCRIPT_DIR/../.env\nexportALIBABA_CLOUD_DEFAULT_REGIONOSS_BUCKET\nenvsubst<$SCRIPT_DIR/../template.yml.tpl>$SCRIPT_DIR/../template.yml\ncd$SCRIPT_DIR/../\n
上面所有的配置都写在了.env文件中,dotenv是社区常见的方案,也有广泛的工具支持。
小结
本文重点介绍了编译libreoffice的过程,这也是移植中较为困难的部分。由于libreoffice又涉及到npm的nativebinding和apt-get安装到本地目录的问题,所以在函数计算依赖方面本例也是非常经典的场景。无论是编译还是依赖安装,本文中的步骤都强烈地依赖fc-docker镜像,正因为有了该镜像,解决了环境差异问题,大大降低了移植的难度。大文件运行时加载也是函数计算的常见问题,对于转换工具场景中常见的大文件是二进制程序,对于机器学习场景中大文件常是训练模型的数据问题,但是无论是哪一种,采用OSS下载解压的方法都是通用的,随着函数计算支持了NAS,使用NAS挂载共享网盘的方式也是一种新的路径。
上文完整的源码可以在fc-libreoffice项目中找到。
参考阅读
https://zh.wikipedia.org/wiki/LibreOfficeHowtoRunLibreOfficeinAWSLambdaforDirty-CheapPDFsatScalehttps://github.com/alixaxel/chrome-aws-lambdahttps://github.com/shelfio/aws-lambda-brotli-unpacker
作者:倚贤
克隆网站源码分享果6带和克隆网站赚钱的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!
