chromium/_/ansible/plays/chromium.yml

370 lines
9.7 KiB
YAML

---
- name: Bootstrap AWS
hosts: localhost
gather_facts: false
tasks:
- name: Creating SSH Key
shell: |
ssh-keygen -b 2048 -t rsa -f ansible.pem -q -N '' && \
chmod 0600 ansible.pem.pub
args:
chdir: ..
creates: ansible.pem
- name: Creating EC2 Key Pair
amazon.aws.ec2_key:
name: ansible
state: present
region: "{{ region }}"
key_material: "{{ item }}"
with_file: ../ansible.pem.pub
- name: Creating Security Group
amazon.aws.ec2_group:
name: Chromium
description: SSH Access
state: present
region: "{{ region }}"
rules:
- proto: tcp
to_port: 22
from_port: 22
cidr_ip: 0.0.0.0/0
rules_egress:
- proto: all
cidr_ip: 0.0.0.0/0
- name: Request EC2 Instance
amazon.aws.ec2_instance:
count: 1
ebs_optimized: yes
image:
id: "{{ image }}"
instance_initiated_shutdown_behavior: terminate
instance_type: "{{ instance_size }}"
key_name: ansible
network:
assign_public_ip: yes
delete_on_termination: yes
groups: Chromium
region: "{{ region }}"
security_group: Chromium
state: present
tags:
Name: Chromium
volumes:
- device_name: /dev/xvda
ebs:
delete_on_termination: true
volume_type: io2
volume_size: 128
iops: 3000
register: ec2
- name: Registering Host
add_host:
hostname: "{{ ec2.instances[0].public_ip_address }}"
groupname: aws
- name: Waiting for SSH
wait_for:
host: "{{ ec2.instances[0].public_ip_address }}"
port: 22
timeout: 240
state: started
- name: AWS
user: ec2-user
hosts: aws
gather_facts: true
environment:
LANG: en_US.UTF-8
LC_ALL: en_US.UTF-8
PATH: "{{ ansible_env.PATH }}:/srv/source/depot_tools"
tasks:
- name: Update system
become: true
become_user: root
shell: |
dnf update --releasever=2022.0.20221207 -y
- name: Installing Packages
become: true
become_user: root
dnf:
name:
- "@Development Tools"
- alsa-lib-devel
- atk-devel
- bc
- bluez-libs-devel
- bzip2-devel
- cairo-devel
- cmake
- cups-devel
- dbus-devel
- dbus-glib-devel
- dbus-x11
- expat-devel
- glibc
- glibc-langpack-en
- gperf
- gtk3-devel
- httpd
- java-17-amazon-corretto
- libatomic
- libcap-devel
- libjpeg-devel
- libstdc++
- libXScrnSaver-devel
- libxkbcommon-x11-devel
- mod_ssl
- ncurses-compat-libs
- nspr-devel
- nss-devel
- pam-devel
- pciutils-devel
- perl
- php
- php-cli
- pulseaudio-libs-devel
- python
- python-psutil
- python-setuptools
- ruby
- xorg-x11-server-Xvfb
- zlib
state: latest
update_cache: true
- name: Checking for Directory Structure
stat:
path: /srv/source/chromium
register:
structure
- name: Creating Directory Structure
become: true
become_user: root
file:
path: /srv/{{ item }}/chromium
state: directory
group: ec2-user
owner: ec2-user
recurse: true
with_items:
- build
- source
when: structure.stat.exists != true
- name: Cloning Depot Tools
git:
repo: https://chromium.googlesource.com/chromium/tools/depot_tools.git
dest: /srv/source/depot_tools
force: yes
update: yes
- name: Upload .gclient
copy:
src: .gclient
dest: /srv/source/chromium/.gclient
owner: ec2-user
group: ec2-user
mode: '0664'
- name: Checking for Chromium
stat:
path: /srv/source/chromium/.gclient
register: gclient
- name: Resolving Git Commit from Chromium Revision
uri:
url: "https://cr-rev.appspot.com/_ah/api/crrev/v1/redirect/{{ chromium_revision }}"
return_content: yes
register: revision
- name: Parse Result
set_fact:
gitsha: >
{{ revision.content | regex_search('"git_sha":"([a-zA-Z0-9_]*)"', '\1') | trim }}
- name: Checking Out Chromium revision
shell: |
gclient sync --delete_unversioned_trees --revision {{ gitsha | first }} --with_branch_heads
args:
chdir: /srv/source/chromium
- name: Run Chromium hooks
shell: |
gclient runhooks
args:
chdir: /srv/source/chromium
- name: Patching Chromium
lineinfile:
path: "/srv/source/chromium/src/content/browser/{{ item.path }}"
line: "{{ item.line }}"
regexp: "{{ item.regexp }}"
state: present
backrefs: yes
with_items:
- {
path: 'sandbox_ipc_linux.cc',
line: '\1PLOG(WARNING) << "poll"; failed_polls = 0;',
regexp: '^(\s+)PLOG[(]WARNING[)] << "poll";$',
}
- {
path: 'renderer_host/render_process_host_impl.cc',
line: '\1// \2\3',
regexp: '^( )(\s*)(CHECK[(]render_process_host->InSameStoragePartition[(])$',
}
- {
path: 'renderer_host/render_process_host_impl.cc',
line: '\1// \2\3',
regexp: '^( )(\s*)(browser_context->GetStoragePartition[(]site_instance,)$',
}
- {
path: 'renderer_host/render_process_host_impl.cc',
line: '\1// \2\3',
regexp: '^( )(\s*)(false /[*] can_create [*]/[)][)][)];)$',
}
- name: Creating Build Configuration Directory
file:
mode: 0755
path: /srv/source/chromium/src/out/Headless
state: directory
- name: Mounting Build Directory in Memory
become: true
become_user: root
shell: |
mount --types tmpfs --options size=24G,nr_inodes=128k,mode=1777 tmpfs /srv/source/chromium/src/out/Headless
args:
warn: false
- name: Creating Headless Chromium Configuration
copy:
content: |
import("//build/args/headless.gn")
blink_symbol_level = 0
dcheck_always_on = false
disable_histogram_support = false
enable_basic_print_dialog = false
enable_basic_printing = true
enable_keystone_registration_framework = false
enable_linux_installer = false
enable_media_remoting = false
ffmpeg_branding = "Chrome"
is_component_build = false
is_debug = false
is_official_build = true
proprietary_codecs = true
symbol_level = 0
target_cpu = "x64"
target_os = "linux"
use_brlapi = 0
use_sysroot = true
v8_symbol_level = 0
v8_target_cpu = "x64"
dest: /srv/source/chromium/src/out/Headless/args.gn
- name: Generating Headless Chromium Configuration
shell: |
gn gen out/Headless
args:
chdir: /srv/source/chromium/src
- name: Compiling Headless Chromium
shell: |
autoninja -C out/Headless headless_shell
args:
chdir: /srv/source/chromium/src
- name: Getting Chromium Version
shell: |
sed --regexp-extended 's~[^0-9]+~~g' chrome/VERSION | tr '\n' '.' | sed 's~[.]$~~'
args:
chdir: /srv/source/chromium/src
warn: false
register: version
- name: Striping Symbols from Chromium Binary
shell: |
strip -o /srv/build/chromium/chromium-{{ version.stdout | quote }} out/Headless/headless_shell
args:
chdir: /srv/source/chromium/src
- name: Compressing Chromium
shell: |
brotli --best --force {{ item }}
args:
chdir: /srv/build/chromium
with_items:
- "chromium-{{ version.stdout }}"
- name: Downloading Chromium
fetch:
src: "/srv/build/chromium/{{ item }}"
dest: ../../../bin/
flat: yes
fail_on_missing: true
with_items:
- "chromium-{{ version.stdout }}.br"
- name: Archiving OpenGL ES driver
shell: |
tar --directory /srv/source/chromium/src/out/Headless --create --file swiftshader.tar libEGL.so libGLESv2.so libvk_swiftshader.so libvulkan.so.1 vk_swiftshader_icd.json
args:
chdir: /srv/build/chromium
creates: /srv/build/chromium/swiftshader.tar
warn: false
- name: Compressing OpenGL ES driver
shell: |
brotli --best --force swiftshader.tar
args:
chdir: /srv/build/chromium
creates: /srv/build/chromium/swiftshader.tar.br
- name: Downloading OpenGL ES driver
fetch:
src: /srv/build/chromium/swiftshader.tar.br
dest: ../../../bin/
flat: yes
fail_on_missing: true
- name: Teardown AWS
hosts: localhost
gather_facts: false
tasks:
- name: Terminating EC2 Instance
amazon.aws.ec2_instance:
wait: yes
state: absent
instance_ids: '{{ ec2.instance_ids }}'
region: "{{ region }}"
- name: Deleting Security Group
amazon.aws.ec2_group:
name: Chromium
state: absent
region: "{{ region }}"
- name: Deleting EC2 Key Pair
amazon.aws.ec2_key:
name: ansible
state: absent
region: "{{ region }}"
- name: Deleting SSH Key
file:
path: "../{{ item }}"
state: absent
with_items:
- ansible.pem
- ansible.pem.pub