鉻與已經可用於Linux無頭模式: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.mdChrome - 無AWS的Lambda?
它與加納利只適用的權利,但它在Chrome 57
到AWS上運行的λ谷歌瀏覽器的任何機會來了官方?
鉻與已經可用於Linux無頭模式: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.mdChrome - 無AWS的Lambda?
它與加納利只適用的權利,但它在Chrome 57
到AWS上運行的λ谷歌瀏覽器的任何機會來了官方?
是;這是可能的。
編譯的Headless Chrome非調試版本產生一個二進制gzip壓縮時的〜125 MB,和不到44 MB。這意味着它適用於功能部署包中的250 MB未壓縮和50 MB大小limitation。 'S(目前)需要什麼樣的
是迫使瀏覽器不使用共享內存的/ dev/shm的編譯。 Theres關於headless-dev谷歌組here的話題。
這裏是我用來建立無頭的Chrome二進制文件將在AWS LAMBDA工作步驟。它們基於this和this。
sudo printf "LANG=en_US.utf-8\nLC_ALL=en_US.utf-8" >> /etc/environment
sudo yum install -y git redhat-lsb python bzip2 tar pkgconfig atk-devel alsa-lib-devel bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel freetype-devel gcc-c++ GConf2-devel glib2-devel glibc.i686 gperf glib2-devel gtk2-devel gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs nspr-devel nss-devel pam-devel pango-devel pciutils-devel pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff --enablerepo=epel
百勝會抱怨有些包不存在。隨你。我沒有看過他們。雖然似乎沒有阻止我構建headless_shell。忽略whiney小百勝並繼續前進。下一步:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo "export PATH=$PATH:$HOME/depot_tools" >> ~/.bash_profile
source ~/.bash_profile
mkdir Chromium && cd Chromium
fetch --no-history chromium
cd src
此時我們需要對Chrome代碼進行非常小的更改。在Linux上,默認情況下,Chrome會假定在/dev/shm
處有一個tmpfs。 Lambda函數沒有可用的tmpfs。 :-(
要改的文件是src/base/files/file_util_posix.cc
。修改GetShmemTempDir()
,使得它總是返回操作系統臨時目錄(/tmp
)。一個簡單的方法做,這是隻刪除整個#if defined(OS_LINUX)
塊在GetShmemTempDir()
功能。一個不太劇烈的變化是硬編碼use_dev_shm
到false
:
bool GetShmemTempDir(bool executable, FilePath* path) {
#if defined(OS_LINUX)
bool use_dev_shm = true;
if (executable) {
static const bool s_dev_shm_executable = DetermineDevShmExecutable();
use_dev_shm = s_dev_shm_executable;
}
// cuz lambda
use_dev_shm = false; // <-- add this. Yes it's pretty hack-y
if (use_dev_shm) {
*path = FilePath("/dev/shm");
return true;
}
#endif
return GetTempDir(path);
}
隨着這種變化,是時候來編譯src
目錄採摘回來的東西時,設置一些編譯參數,然後(最後一個命令)開始構建。過程。
mkdir -p out/Headless
echo 'import("//build/args/headless.gn")' > out/Headless/args.gn
echo 'is_debug = false' >> out/Headless/args.gn
echo 'symbol_level = 0' >> out/Headless/args.gn
echo 'is_component_build = false' >> out/Headless/args.gn
echo 'remove_webcore_debug_symbols = true' >> out/Headless/args.gn
echo 'enable_nacl = false' >> out/Headless/args.gn
gn gen out/Headless
ninja -C out/Headless headless_shell
最後我們做出相關的文件(S),我們就需要在運行LAMBDA的壓縮包。
mkdir out/headless-chrome && cd out
cp Headless/headless_shell Headless/libosmesa.so headless-chrome/
tar -zcvf chrome-headless-lambda-linux-x64.tar.gz headless-chrome/
在LAMBDA,通過執行啓用遠程調試器界面運行headless_shell
:
/path/to/headless_shell --disable-gpu --no-sandbox --remote-debugging-port=9222 --user-data-dir=/tmp/user-data --single-process --data-path=/tmp/data-path --homedir=/tmp --disk-cache-dir=/tmp/cache-dir
因爲/ tmp目錄是一個lambda函數的唯一可寫的地方,有標誌的一堆只是告訴瀏覽器在哪裏轉儲它的數據。他們沒有必要,但它讓Chrome開心。還請注意,與--disable-gpu
標誌一起,我們不需要libosmesa.so
,它的遺漏會從我們的軟件包zip中刪除大約4 MB。
我想知道同樣的事情。我對它進行了一次破解,但它似乎還沒有正常工作。我的進展在這裏:https://github.com/adieuadieu/thingamajigs/tree/master/serverless-chrome-pdf這裏也有一個關於此主題的主題:https://groups.google.com/a/chromium.org/d/MSG /無頭-dev的/ qqbZVZ2IwEw/Wr9wmgb1EQAJ –