GithubHelp home page GithubHelp logo

Comments (4)

nicomiguelino avatar nicomiguelino commented on September 28, 2024

Have you tried installing Docker manually (just do see what specifically the issues are)? These might help:

from anthias.

idMasjid avatar idMasjid commented on September 28, 2024

Have you tried installing Docker manually (just do see what specifically the issues are)? These might help:

* [Install Docker Engine on Raspberry Pi OS (32-bit)](https://docs.docker.com/engine/install/raspberry-pi-os/)

* [Install Docker Engine on Debian](https://docs.docker.com/engine/install/debian/)

after install docker engine on pi os 64 bit the same problem
i try to renew install the same error with frezze "overload ram"on the step:

       d8888            888     888
      d88888            888     888       888
     d88P888            888     888
    d88P 888  88888b.   888888  88888b.   888   8888b.   .d8888b
   d88P  888  888 '88b  888     888 '88b  888      '88b  88K
  d88P   888  888  888  888     888  888  888  .d888888  'Y8888b.
 d8888888888  888  888  Y88b.   888  888  888  888  888       X88
d88P     888  888  888   Y888   888  888  888  'Y888888   88888P'
==================================================================


Anthias requires a dedicated Raspberry Pi / SD card.
You will not be able to use the regular desktop environment once installed.

Do you still want to continue? (y/N)
Do you want Anthias to manage your network? This is recommended for most users because this adds features to manage your network. (Y/n)

Would you like to perform a full system upgrade as well? (y/N)
+ REPOSITORY=https://github.com/screenly/anthias.git
+ '[' '!' -d /home/root/screenly ']'
+ mkdir /home/root/screenly
+ sudo mkdir -p /etc/ansible
+ echo -e '[local]\nlocalhost ansible_connection=local'
+ sudo tee /etc/ansible/hosts
+ '[' '!' -f /etc/locale.gen ']'
++ lsb_release -rs
+ RASPBIAN_VERSION=12
+ APT_INSTALL_ARGS=("git" "libffi-dev" "libssl-dev" "whois")
+ '[' 12 = 12 ']'
+ APT_INSTALL_ARGS+=("python3-full")
+ sudo sed -i s/apt.screenlyapp.com/archive.raspbian.org/g /etc/apt/sources.list
+ sudo apt update -y
Hit:1 http://deb.debian.org/debian bookworm InRelease
Hit:2 http://deb.debian.org/debian-security bookworm-security InRelease
Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
Hit:4 https://download.docker.com/linux/debian bookworm InRelease
Hit:5 http://archive.raspberrypi.com/debian bookworm InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
+ sudo apt-get install -y --no-install-recommends git libffi-dev libssl-dev whois python3-full
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
git is already the newest version (1:2.39.2-1.1).
git set to manually installed.
The following additional packages will be installed:
  2to3 blt fonts-mathjax idle idle-python3.11 libjs-mathjax libpython3.11-testsuite libtcl8.6 libtk8.6 libxft2 libxrender1 libxss1 python3-gdbm python3-tk
  python3.11-full tk8.6-blt2.5 x11-common
Suggested packages:
  blt-demo fonts-mathjax-extras fonts-stix libjs-mathjax-doc libssl-doc tcl8.6 tk8.6 python3-dev python3-gdbm-dbg tix python3-tk-dbg python3.11-dev
Recommended packages:
  python3-doc python3-examples python3.11-doc python3.11-examples
The following NEW packages will be installed:
  2to3 blt fonts-mathjax idle idle-python3.11 libffi-dev libjs-mathjax libpython3.11-testsuite libssl-dev libtcl8.6 libtk8.6 libxft2 libxrender1 libxss1
  python3-full python3-gdbm python3-tk python3.11-full tk8.6-blt2.5 whois x11-common
0 upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 16.8 MB of archives.
After this operation, 97.4 MB of additional disk space will be used.
Get:1 http://deb.debian.org/debian bookworm/main arm64 2to3 all 3.11.2-1 [10.0 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 libtcl8.6 arm64 8.6.13+dfsg-2 [973 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 libxrender1 arm64 1:0.9.10-1.1 [32.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main arm64 libxft2 arm64 2.3.6-1 [58.7 kB]
Get:5 http://deb.debian.org/debian bookworm/main arm64 x11-common all 1:7.7+23 [252 kB]
Get:6 http://deb.debian.org/debian bookworm/main arm64 libxss1 arm64 1:1.2.3-1 [17.8 kB]
Get:7 http://deb.debian.org/debian bookworm/main arm64 libtk8.6 arm64 8.6.13-2 [729 kB]
Get:8 http://archive.raspberrypi.com/debian bookworm/main arm64 libssl-dev arm64 3.0.11-1~deb12u2+rpt1 [2,303 kB]
Get:9 http://deb.debian.org/debian bookworm/main arm64 tk8.6-blt2.5 arm64 2.5.3+dfsg-4.1 [540 kB]
Get:10 http://deb.debian.org/debian bookworm/main arm64 blt arm64 2.5.3+dfsg-4.1 [14.9 kB]
Get:11 http://deb.debian.org/debian bookworm/main arm64 fonts-mathjax all 2.7.9+dfsg-1 [2,210 kB]
Get:12 http://deb.debian.org/debian bookworm/main arm64 python3-tk arm64 3.11.2-3 [97.7 kB]
Get:13 http://deb.debian.org/debian bookworm/main arm64 libjs-mathjax all 2.7.9+dfsg-1 [5,667 kB]
Get:14 http://deb.debian.org/debian bookworm/main arm64 idle-python3.11 all 3.11.2-6 [357 kB]
Get:15 http://deb.debian.org/debian bookworm/main arm64 idle all 3.11.2-1 [2,824 B]
Get:16 http://deb.debian.org/debian bookworm/main arm64 libffi-dev arm64 3.4.4-1 [56.0 kB]
Get:17 http://deb.debian.org/debian bookworm/main arm64 libpython3.11-testsuite all 3.11.2-6 [3,363 kB]
Get:18 http://deb.debian.org/debian bookworm/main arm64 python3-gdbm arm64 3.11.2-3 [14.7 kB]
Get:19 http://deb.debian.org/debian bookworm/main arm64 python3.11-full arm64 3.11.2-6 [1,280 B]
Get:20 http://deb.debian.org/debian bookworm/main arm64 python3-full arm64 3.11.2-1+b1 [1,332 B]
Get:21 http://deb.debian.org/debian bookworm/main arm64 whois arm64 5.5.17 [69.1 kB]
Fetched 16.8 MB in 6s (2,941 kB/s)
Selecting previously unselected package 2to3.
(Reading database ... 77247 files and directories currently installed.)
Preparing to unpack .../00-2to3_3.11.2-1_all.deb ...
Unpacking 2to3 (3.11.2-1) ...
Selecting previously unselected package libtcl8.6:arm64.
Preparing to unpack .../01-libtcl8.6_8.6.13+dfsg-2_arm64.deb ...
Unpacking libtcl8.6:arm64 (8.6.13+dfsg-2) ...
Selecting previously unselected package libxrender1:arm64.
Preparing to unpack .../02-libxrender1_1%3a0.9.10-1.1_arm64.deb ...
Unpacking libxrender1:arm64 (1:0.9.10-1.1) ...
Selecting previously unselected package libxft2:arm64.
Preparing to unpack .../03-libxft2_2.3.6-1_arm64.deb ...
Unpacking libxft2:arm64 (2.3.6-1) ...
Selecting previously unselected package x11-common.
Preparing to unpack .../04-x11-common_1%3a7.7+23_all.deb ...
Unpacking x11-common (1:7.7+23) ...
Selecting previously unselected package libxss1:arm64.
Preparing to unpack .../05-libxss1_1%3a1.2.3-1_arm64.deb ...
Unpacking libxss1:arm64 (1:1.2.3-1) ...
Selecting previously unselected package libtk8.6:arm64.
Preparing to unpack .../06-libtk8.6_8.6.13-2_arm64.deb ...
Unpacking libtk8.6:arm64 (8.6.13-2) ...
Selecting previously unselected package tk8.6-blt2.5.
Preparing to unpack .../07-tk8.6-blt2.5_2.5.3+dfsg-4.1_arm64.deb ...
Unpacking tk8.6-blt2.5 (2.5.3+dfsg-4.1) ...
Selecting previously unselected package blt.
Preparing to unpack .../08-blt_2.5.3+dfsg-4.1_arm64.deb ...
Unpacking blt (2.5.3+dfsg-4.1) ...
Selecting previously unselected package fonts-mathjax.
Preparing to unpack .../09-fonts-mathjax_2.7.9+dfsg-1_all.deb ...
Unpacking fonts-mathjax (2.7.9+dfsg-1) ...
Selecting previously unselected package python3-tk:arm64.
Preparing to unpack .../10-python3-tk_3.11.2-3_arm64.deb ...
Unpacking python3-tk:arm64 (3.11.2-3) ...
Selecting previously unselected package libjs-mathjax.
Preparing to unpack .../11-libjs-mathjax_2.7.9+dfsg-1_all.deb ...
Unpacking libjs-mathjax (2.7.9+dfsg-1) ...
Selecting previously unselected package idle-python3.11.
Preparing to unpack .../12-idle-python3.11_3.11.2-6_all.deb ...
Unpacking idle-python3.11 (3.11.2-6) ...
Selecting previously unselected package idle.
Preparing to unpack .../13-idle_3.11.2-1_all.deb ...
Unpacking idle (3.11.2-1) ...
Selecting previously unselected package libffi-dev:arm64.
Preparing to unpack .../14-libffi-dev_3.4.4-1_arm64.deb ...
Unpacking libffi-dev:arm64 (3.4.4-1) ...
Selecting previously unselected package libpython3.11-testsuite.
Preparing to unpack .../15-libpython3.11-testsuite_3.11.2-6_all.deb ...
Unpacking libpython3.11-testsuite (3.11.2-6) ...
Selecting previously unselected package libssl-dev:arm64.
Preparing to unpack .../16-libssl-dev_3.0.11-1~deb12u2+rpt1_arm64.deb ...
Unpacking libssl-dev:arm64 (3.0.11-1~deb12u2+rpt1) ...
Selecting previously unselected package python3-gdbm:arm64.
Preparing to unpack .../17-python3-gdbm_3.11.2-3_arm64.deb ...
Unpacking python3-gdbm:arm64 (3.11.2-3) ...
Selecting previously unselected package python3.11-full.
Preparing to unpack .../18-python3.11-full_3.11.2-6_arm64.deb ...
Unpacking python3.11-full (3.11.2-6) ...
Selecting previously unselected package python3-full.
Preparing to unpack .../19-python3-full_3.11.2-1+b1_arm64.deb ...
Unpacking python3-full (3.11.2-1+b1) ...
Selecting previously unselected package whois.
Preparing to unpack .../20-whois_5.5.17_arm64.deb ...
Unpacking whois (5.5.17) ...
Setting up fonts-mathjax (2.7.9+dfsg-1) ...
Setting up libjs-mathjax (2.7.9+dfsg-1) ...
Setting up whois (5.5.17) ...
Setting up libpython3.11-testsuite (3.11.2-6) ...
Setting up libxrender1:arm64 (1:0.9.10-1.1) ...
Setting up python3-gdbm:arm64 (3.11.2-3) ...
Setting up x11-common (1:7.7+23) ...
Setting up 2to3 (3.11.2-1) ...
Setting up libffi-dev:arm64 (3.4.4-1) ...
Setting up libssl-dev:arm64 (3.0.11-1~deb12u2+rpt1) ...
Setting up libtcl8.6:arm64 (8.6.13+dfsg-2) ...
Setting up libxss1:arm64 (1:1.2.3-1) ...
Setting up libxft2:arm64 (2.3.6-1) ...
Setting up libtk8.6:arm64 (8.6.13-2) ...
Setting up tk8.6-blt2.5 (2.5.3+dfsg-4.1) ...
Setting up blt (2.5.3+dfsg-4.1) ...
Setting up python3-tk:arm64 (3.11.2-3) ...
Setting up idle-python3.11 (3.11.2-6) ...
Setting up idle (3.11.2-1) ...
Setting up python3.11-full (3.11.2-6) ...
Setting up python3-full (3.11.2-1+b1) ...
Processing triggers for libc-bin (2.36-9+rpt2+deb12u6) ...
Processing triggers for man-db (2.11.2-2) ...
+ '[' n == y ']'
+ export MANAGE_NETWORK=false
+ MANAGE_NETWORK=false
+ '[' master = master ']'
++ curl -s https://raw.githubusercontent.com/screenly/anthias/master/requirements/requirements.host.txt
++ grep ansible
+ ANSIBLE_VERSION=ansible-core==2.12
+ SUDO_ARGS=()
+ '[' 12 = 12 ']'
+ python3 -m venv /home/root/installer_venv
+ source /home/root/installer_venv/bin/activate
++ deactivate nondestructive
++ '[' -n '' ']'
++ '[' -n '' ']'
++ '[' -n /usr/bin/bash -o -n '' ']'
++ hash -r
++ '[' -n '' ']'
++ unset VIRTUAL_ENV
++ unset VIRTUAL_ENV_PROMPT
++ '[' '!' nondestructive = nondestructive ']'
++ VIRTUAL_ENV=/home/root/installer_venv
++ export VIRTUAL_ENV
++ _OLD_VIRTUAL_PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
++ PATH=/home/root/installer_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
++ export PATH
++ '[' -n '' ']'
++ '[' -z '' ']'
++ _OLD_VIRTUAL_PS1=
++ PS1='(installer_venv) '
++ export PS1
++ VIRTUAL_ENV_PROMPT='(installer_venv) '
++ export VIRTUAL_ENV_PROMPT
++ '[' -n /usr/bin/bash -o -n '' ']'
++ hash -r
+ SUDO_ARGS+=("--preserve-env" "env" "PATH=$PATH")
+ sudo --preserve-env env PATH=/home/root/installer_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin pip install cryptography==38.0.2
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting cryptography==38.0.2
  Downloading cryptography-38.0.2-cp36-abi3-manylinux_2_28_aarch64.whl (4.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.0/4.0 MB 2.3 MB/s eta 0:00:00
Collecting cffi>=1.12
  Downloading cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (466 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 466.6/466.6 kB 2.1 MB/s eta 0:00:00
Collecting pycparser
  Downloading https://www.piwheels.org/simple/pycparser/pycparser-2.22-py3-none-any.whl (117 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.6/117.6 kB 473.4 kB/s eta 0:00:00
WARNING: The candidate selected for download or install is a yanked version: 'cryptography' candidate (version 38.0.2 at https://files.pythonhosted.org/packages/98/89/98df97a1b7c14bebe75dc64d88d3c997dae8370cc75e00fc0c5e3fdb6300/cryptography-38.0.2-cp36-abi3-manylinux_2_28_aarch64.whl (from https://pypi.org/simple/cryptography/) (requires-python:>=3.6))
Reason for being yanked: Regression in OpenSSL.
Installing collected packages: pycparser, cffi, cryptography
Successfully installed cffi-1.16.0 cryptography-38.0.2 pycparser-2.22
+ sudo --preserve-env env PATH=/home/root/installer_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin pip install ansible-core==2.12
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting ansible-core==2.12
  Downloading https://www.piwheels.org/simple/ansible-core/ansible_core-2.12.0-py3-none-any.whl (2.1 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 1.8 MB/s eta 0:00:00
Collecting jinja2
  Downloading https://www.piwheels.org/simple/jinja2/Jinja2-3.1.3-py3-none-any.whl (133 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.2/133.2 kB 903.1 kB/s eta 0:00:00
Collecting PyYAML
  Downloading PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (732 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 732.2/732.2 kB 2.0 MB/s eta 0:00:00
Requirement already satisfied: cryptography in ./installer_venv/lib/python3.11/site-packages (from ansible-core==2.12) (38.0.2)
Collecting packaging
  Downloading https://www.piwheels.org/simple/packaging/packaging-24.0-py3-none-any.whl (53 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.5/53.5 kB 403.6 kB/s eta 0:00:00
Collecting resolvelib<0.6.0,>=0.5.3
  Downloading https://www.piwheels.org/simple/resolvelib/resolvelib-0.5.4-py2.py3-none-any.whl (12 kB)
Requirement already satisfied: cffi>=1.12 in ./installer_venv/lib/python3.11/site-packages (from cryptography->ansible-core==2.12) (1.16.0)
Collecting MarkupSafe>=2.0
  Downloading MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (29 kB)
Requirement already satisfied: pycparser in ./installer_venv/lib/python3.11/site-packages (from cffi>=1.12->cryptography->ansible-core==2.12) (2.22)
Installing collected packages: resolvelib, PyYAML, packaging, MarkupSafe, jinja2, ansible-core
Successfully installed MarkupSafe-2.1.5 PyYAML-6.0.1 ansible-core-2.12.0 jinja2-3.1.3 packaging-24.0 resolvelib-0.5.4
+ sudo -u root --preserve-env env PATH=/home/root/installer_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ansible localhost -m git -a 'repo=https://github.com/screenly/anthias.git dest=/home/root/screenly version=master force=no'
localhost | CHANGED => {
    "after": "7b559efa84d92664c42d4896edcd9510e4c93c6d",
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "before": null,
    "changed": true
}
+ cd /home/root/screenly/ansible
+ sudo -E -u root --preserve-env env PATH=/home/root/installer_venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ansible-playbook site.yml

PLAY [Install Screenly] **********************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************
ok: [localhost]

TASK [system : Create a config_path variable] ************************************************************************************************************************
ok: [localhost]

TASK [system : Check NOOBS] ******************************************************************************************************************************************
ok: [localhost]

TASK [system : Make sure we have proper framebuffer depth] ***********************************************************************************************************
changed: [localhost]

TASK [system : Fix framebuffer bug] **********************************************************************************************************************************
changed: [localhost]

TASK [system : Add gpu_mem_256 in config.txt if it doesn't exist] ****************************************************************************************************
changed: [localhost]

TASK [system : Add gpu_mem_512 in config.txt if it doesn't exist] ****************************************************************************************************
changed: [localhost]

TASK [system : Add gpu_mem_1024 in config.txt if it doesn't exist] ***************************************************************************************************
changed: [localhost]

TASK [system : Add pi4 section in config.txt if it doesn't exist] ****************************************************************************************************
changed: [localhost]

TASK [system : Comment out the original dtoverlay config.] ***********************************************************************************************************
changed: [localhost]

TASK [system : Add FKMS config for Pi 4. (<= Debian 11)] *************************************************************************************************************
skipping: [localhost]

TASK [system : Add FKMS config for Pi 4. (>= Debian 12)] *************************************************************************************************************
changed: [localhost]

TASK [system : Backup kernel boot args] ******************************************************************************************************************************
changed: [localhost]

TASK [system : Notice for cmdline.txt.orig file] *********************************************************************************************************************
ok: [localhost] => {
    "msg": "Use cmdline.txt.orig for boot parameters (don't remove this file)"
}

TASK [system : Copy cmdline.txt.orig to cmdline.txt] *****************************************************************************************************************
changed: [localhost]

TASK [system : For splash screen using Plymouth] *********************************************************************************************************************
changed: [localhost]

TASK [system : Remove blinking cursor] *******************************************************************************************************************************
changed: [localhost]

TASK [system : Plymouth ignore serial consoles] **********************************************************************************************************************
changed: [localhost]

TASK [system : Use Systemd as init and quiet boot process] ***********************************************************************************************************
changed: [localhost]

TASK [system : Set ethN/wlanN names for interfaces] ******************************************************************************************************************
changed: [localhost]

TASK [system : Set cgroup_enable required by containerd for OOM] *****************************************************************************************************
changed: [localhost]

TASK [system : Set cgroup_memory required by containerd for OOM] *****************************************************************************************************
changed: [localhost]

TASK [system : Check if cdefs.h exists] ******************************************************************************************************************************
ok: [localhost]

TASK [system : Set fact for cdefs] ***********************************************************************************************************************************
ok: [localhost]

TASK [system : Remove libc6-dev] *************************************************************************************************************************************
changed: [localhost]

TASK [system : Install libc6-dev] ************************************************************************************************************************************
changed: [localhost]

TASK [system : Install Screenly dependencies] ************************************************************************************************************************
changed: [localhost]

TASK [system : Remove deprecated apt dependencies] *******************************************************************************************************************
6

from anthias.

idMasjid avatar idMasjid commented on September 28, 2024

"I've just made progress in the installation... I managed to move forward by installing Docker before running the script # bash <(curl -sL https://install-anthias.srly.io) and executing all commands as the superuser 'root'. Now I'm at the stage of launching the application in Docker #bash /home/$USER/screenly/bin/upgrade_containers.sh but the Raspberry Pi freezes on startup. It seems like it's running out of RAM. With the Anthias script running, I end up with only 350MB of RAM."
image

from anthias.

nicomiguelino avatar nicomiguelino commented on September 28, 2024

Thanks for providing results. Looks like a memory usage issue. Changes to the installation process can be made. Or maybe not use Docker, at least for Pi devices with smaller memory capacity.

from anthias.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.