Этой статьей я начну серию переводов китайских коллег о прекрасной стране - "Эксплуатация V8"
Прежде чем приступить к изучению V8, необходимо разобраться со средой эксплуотации. туториалов по сборке среды v8 в интернете довольно много. Когда мы создаем среду в Китае, по хорошо известным причинам мы столкнемся с первым узким местом,ВЕЛИКИМ КИТАЙСКИМ ФАЕРВОЛОМ, сетевыми решениями. Тем не менее, скорость сети самая высокая, когда окружение размещено на vps. Но тогда вы столкнетесь со вторым узким местом, БАНДОЙ ОФИГЕВШИХ СУМОИСТОВ - узким местом производительности. Общая производительность vps для самостоятельного использования составляет около 1c1g, и однажды компиляция заняла около 1 часа.
Есть принципиально разные версии эксплойтов. Изучить один и потратить на компиляцию около 1 часа - как сделать другу харакири. Вот я и подумал, есть ли готовая докерная среда, чтобы не тратить время на компиляцию, но подходящего докера не нашел, нашел только проект под названием docker-v8 , а там аж несколько версий, а Dockerfile и Makefile написаны неправильно, да и скомпилирована только последняя версия, и никакая другая версия не хотела компилироваться. Поэтому я внес некоторые изменения в этот проект, намереваясь скомпилировать его на моем mbp и собрать соответствующий докер самостоятельно. Но я не ожидал, что процессор i9 не очень хорош, это совсем дрянь, частота будет снижаться, как только нагреется, а яйца можно сварить где-то за 10 с. На компиляцию один раз уходит около получаса, плюс сетевой фактор, на выполнение всего процесса уходит около 1 часа. Затем я вспомнил, что некоторое время назад подарил своей девушке настольный компьютер с AMD 5950x, с технологией удаленного включени, но как оказалась потом и она не работала , и в итоге использовал Xiaomi Smart Socket, настроив рабочий стол на автоматическое включение, чтобы предоставить мне удаленный доступ.
Этот настольник был куплен для моей девушки, чтобы играть в игры, поэтому на нем был установлен windows без виртуальной машины. Однако WSL была установлена и скомпилирована непосредственно на WSL, маршрутизатор был openwrt, что позволило для работы использовать глобальный прокси, что в свою очередь решило проблему работы по сети. Наконец, целый набор процессов пошел на ура, и потребовалось всего около 5 минут, чтобы сгенерировать любую версию среды v8. Затем перетащите d8 локально, и вы сможете собрать соответствующую версию docker.
Создание среды
Ниже приводится подробное описание процесса, который я использовал для компиляции среды v8 в WSL.
1. Сначала установите соответствующие зависимости:
2. Получите depot_tools:
3. Установите переменную среды для depot_tools:
4.
Эта команда будет клонировать v8, v8 довольно большой, поэтому скорость этой команды зависит от условий сети
5. Установите зависимости, связанные с v8, зависимости шрифтов столкнутся с некоторыми сетевыми проблемами, даже если они используют прокси, но я не изучал уязвимости шрифтов, поэтому я не решил эту проблему, поэтому я не устанавливаю зависимости шрифтов напрямую:
6. Дальше по учебнику делаем так
Если скомпилированную среду v8 необходимо перенести, рекомендуется установить v8_monolithic=true, поэтому вам нужно перенести только один d8. Программа просто отличная. В противном случае вам придется перенести другие (моментальные) зависимости.
Выше приведена команда для компиляции последней версии окружения, но мне нужно компилировать любую версию, поэтому запилю ка я скриптец build.sh
Вот что из него выползло:
Немного выпрямив извилины, решил изменить его Makefile:
а затем модифицировал Dockerfile:
Вот как то так.
Продолжение следует
Прежде чем приступить к изучению V8, необходимо разобраться со средой эксплуотации. туториалов по сборке среды v8 в интернете довольно много. Когда мы создаем среду в Китае, по хорошо известным причинам мы столкнемся с первым узким местом,
Есть принципиально разные версии эксплойтов. Изучить один и потратить на компиляцию около 1 часа - как сделать другу харакири. Вот я и подумал, есть ли готовая докерная среда, чтобы не тратить время на компиляцию, но подходящего докера не нашел, нашел только проект под названием docker-v8 , а там аж несколько версий, а Dockerfile и Makefile написаны неправильно, да и скомпилирована только последняя версия, и никакая другая версия не хотела компилироваться. Поэтому я внес некоторые изменения в этот проект, намереваясь скомпилировать его на моем mbp и собрать соответствующий докер самостоятельно. Но я не ожидал, что процессор i9 не очень хорош, это совсем дрянь, частота будет снижаться, как только нагреется, а яйца можно сварить где-то за 10 с. На компиляцию один раз уходит около получаса, плюс сетевой фактор, на выполнение всего процесса уходит около 1 часа. Затем я вспомнил, что некоторое время назад подарил своей девушке настольный компьютер с AMD 5950x, с технологией удаленного включени, но как оказалась потом и она не работала , и в итоге использовал Xiaomi Smart Socket, настроив рабочий стол на автоматическое включение, чтобы предоставить мне удаленный доступ.
Этот настольник был куплен для моей девушки, чтобы играть в игры, поэтому на нем был установлен windows без виртуальной машины. Однако WSL была установлена и скомпилирована непосредственно на WSL, маршрутизатор был openwrt, что позволило для работы использовать глобальный прокси, что в свою очередь решило проблему работы по сети. Наконец, целый набор процессов пошел на ура, и потребовалось всего около 5 минут, чтобы сгенерировать любую версию среды v8. Затем перетащите d8 локально, и вы сможете собрать соответствующую версию docker.
Создание среды
Ниже приводится подробное описание процесса, который я использовал для компиляции среды v8 в WSL.
1. Сначала установите соответствующие зависимости:
Код:
sudo apt install bison cdbs curl flex g++ git python vim pkg-config
2. Получите depot_tools:
Код:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
3. Установите переменную среды для depot_tools:
Код:
echo "export PATH=$(pwd)/depot_tools:${PATH}" >> ~/.zshrc
4.
Код:
fetch v8
5. Установите зависимости, связанные с v8, зависимости шрифтов столкнутся с некоторыми сетевыми проблемами, даже если они используют прокси, но я не изучал уязвимости шрифтов, поэтому я не решил эту проблему, поэтому я не устанавливаю зависимости шрифтов напрямую:
Код:
./v8/build/install-build-deps.sh --no-chromeos-fonts
6. Дальше по учебнику делаем так
Код:
$ cd v8
$ gclient sync
$ gn gen out/x64.release --args='v8_monolithic=true v8_use_external_startup_data=false is_component_build=false is_debug=false target_cpu="x64" use_goma=false goma_dir="None" v8_enable_backtrace=true v8_enable_disassembler=true v8_enable_object_print=true v8_enable_verify_heap=true'
ninja -C out/x64.release d8
Если скомпилированную среду v8 необходимо перенести, рекомендуется установить v8_monolithic=true, поэтому вам нужно перенести только один d8. Программа просто отличная. В противном случае вам придется перенести другие (моментальные) зависимости.
Выше приведена команда для компиляции последней версии окружения, но мне нужно компилировать любую версию, поэтому запилю ка я скриптец build.sh
Код:
$ cat build.sh
#!/bin/bash
VER=$1
if [ -z $2 ];then
NAME=$VER
else
NAME=$2
fi
cd v8
git reset --hard $VER
gclient sync -D
gn gen out/x64_$NAME.release --args='v8_monolithic=true v8_use_external_startup_data=false is_component_build=false is_debug=false target_cpu="x64" use_goma=false goma_dir="None" v8_enable_backtrace=true v8_enable_disassembler=true v8_enable_object_print=true v8_enable_verify_heap=true'
ninja -C out/x64_$NAME.release d8
Вот что из него выползло:
Код:
$ time ./build.sh "9.6.180.6"
HEAD is now at 67eacd3dce Version 9.6.180.6
Syncing projects: 100% (29/29), done.
Running hooks: 100% (27/27), done.
Done. Made 178 targets from 98 files in 244ms
ninja: Entering directory `out/x64_9.6.180.6.release'
[1839/1839] LINK ./d8
./build.sh "9.6.180.6" 4581.36s user 691.20s system 1586% cpu 5:32.41 total
Немного выпрямив извилины, решил изменить его Makefile:
Код:
$ cat Makefile
TAG:=$(tag)
IMAGE:=hcamael/v8
default: help
help:
@echo 'V8/D8 ${TAG} Docker image build file'
@echo
@echo 'Usage:'
@echo ' make clean Delete dangling images and d8 images'
@echo ' make build Build the d8 image using local Dockerfile'
@echo ' make push Push an existing image to Docker Hub'
@echo ' make deploy Clean, build and push image to Docker Hub'
@echo ' make github Tag the project in GitHub'
@echo
build:
docker build --build-arg V8_VERSION=${TAG} -t ${IMAGE}:${TAG} .
clean:
# Remove containers with exited status:
docker rm `docker ps -a -f status=exited -q` || true
docker rmi ${IMAGE}:latest || true
docker rmi ${IMAGE}:${TAG} || true
# Delete dangling images
docker rmi `docker images -f dangling=true -q` || true
push:
docker push docker.io/${IMAGE}:${TAG}
docker tag ${IMAGE}:${TAG} docker.io/${IMAGE}:latest
docker push docker.io/${IMAGE}:latest
deploy: clean build push
github:
git push
git tag -a ${TAG} -m 'Version ${TAG}'
git push origin --tags
.PHONY: help build clean push deploy github
а затем модифицировал Dockerfile:
Код:
$ cat Dockerfile
FROM debian:stable-slim
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update && apt-get upgrade -yqq && \
DEBIAN_FRONTEND=noninteractive apt-get install curl rlwrap vim -yqq gdb && \
apt-get clean
ARG V8_VERSION=latest
ENV V8_VERSION=$V8_VERSION
LABEL v8.version=$V8_VERSION \
maintainer="test@admin.com"
WORKDIR /v8
COPY /v8_$V8_VERSION/d8 ./
COPY vimrc /root/.vimrc
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh && \
mkdir /examples && \
ln -s /v8/d8 /usr/local/bin/d8
ENTRYPOINT ["/entrypoint.sh"]
Вот как то так.
Продолжение следует