Code Monkey home page Code Monkey logo

Comments (4)

Dramelac avatar Dramelac commented on July 26, 2024

Indeed it's strange, did you modify something on your host?

Could you do the following tests?

  • ls -la /etc/timezone
  • exegol info <container_name>
  • docker inspect <container_name or id>

Thank you!

from exegol.

ShutdownRepo avatar ShutdownRepo commented on July 26, 2024

I don't think I modified anything on my host

MacBook Pro ~ $ ls -la /etc/timezone
ls: /etc/timezone: No such file or directory
MacBook Pro ~ $ ls -la /etc/localtime
lrwxr-xr-x  1 root  wheel  38 Jun 22 11:31 /etc/localtime -> /var/db/timezone/zoneinfo/Europe/Paris

I deleted the container featured in the traceback above. However, I had another container laying around with the same issue, so here it is.

MacBook Pro ~ $ exegol info -vvv htb-forest
[*] Exegol is currently in version v4.0.5b1
[D] Pip installation: Off 🪓
[D] Git source installation: On ✔
[D] Host OS: Mac
[D] Arch: arm64
[D] Docker desktop: On ✔
[D] Shell type: Mac
[D] Last update check: 12/09/2022

[+] Exegol thanks Capgemini for supporting the project (dev contributors) 🙏
[+] Interested in joining Capgemini? https://www.capgemini.com/fr-fr/carrieres/offres-emploi/
[V] Listing user configurations

🧠 User configurations
┌───────────────────────────────────────────────────────────────────┐
│ Private workspace: /Users/charlie/.exegol/workspaces              │
│ Exegol resources: /Users/charlie/Projects/Exegol/exegol-resources │
│ My resources: /Users/charlie/.exegol/my-resources                 │
│ Auto-check updates: On ✔                                          │
│ Auto-remove images: On ✔                                          │
│ Auto-update fs: Off 🪓                                            │
└───────────────────────────────────────────────────────────────────┘

[V] Listing git repositories
[D] Loading git at /Users/charlie/Projects/Exegol
[D] Repo path: /Users/charlie/Projects/Exegol/.git
[D] Git repository successfully loaded
[D] Loading git at /Users/charlie/Projects/Exegol
[D] Repo path: /Users/charlie/Projects/Exegol/.git
[D] Git repository successfully loaded
[V] Git wrapper init submodules
[D] Git submodule repository detected
[D] Loading git at /Users/charlie/Projects/Exegol/exegol-docker-build
[D] Repo path: /Users/charlie/Projects/Exegol/.git/modules/sources
[D] Git repository successfully loaded
[D] Git submodule repository detected
[D] Loading git at /Users/charlie/Projects/Exegol/exegol-resources
[D] Repo path: /Users/charlie/Projects/Exegol/.git/modules/exegol-resources
[D] Git repository successfully loaded
[D] Fetch flags : 4
[D] Fetch note :
[D] Fetch old commit : None
[D] Fetch remote path : dev
[D] HEAD UP TO DATE flag detected
[D] Fetch flags : 4
[D] Fetch note :
[D] Fetch old commit : None
[D] Fetch remote path : dev
[D] HEAD UP TO DATE flag detected
[D] Fetch flags : 4
[D] Fetch note :
[D] Fetch old commit : None
[D] Fetch remote path : main
[D] HEAD UP TO DATE flag detected

🐙 Project modules
┌───────────┬──────────────────┬────────────────┐
│ Name      │ Status           │ Current branch │
├───────────┼──────────────────┼────────────────┤
│ Wrapper   │ Update available │ dev            │
│ Images    │ Update available │ dev            │
│ Resources │ Update available │ main           │
└───────────┴──────────────────┴────────────────┘

[D] Attribute not found in parameters: multicontainertag
[D] == Loading container : exegol-htb-forest
[D] Parsing envs : DISPLAY=host.docker.internal:0
[D] Adding env DISPLAY=host.docker.internal:0
[D] Parsing envs : _JAVA_AWT_WM_NONREPARENTING=1
[D] Adding env _JAVA_AWT_WM_NONREPARENTING=1
[D] Parsing envs : QT_X11_NO_MITSHM=1
[D] Adding env QT_X11_NO_MITSHM=1
[D] Parsing envs : PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[D] Adding env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[D] Capabilities : ['NET_ADMIN']
[D] Load devices : ['/dev/net/tun:/dev/net/tun:rwm']
[D] Parsing mount : {'Type': 'bind', 'Source': '/Users/charlie/.exegol/workspaces/htb-forest', 'Destination': '/workspace', 'Mode': '',
'RW': True, 'Propagation': 'rprivate'}
[D] Loading workspace volume source : /Users/charlie/.exegol/workspaces/htb-forest
[D] Private workspace detected
[D] Parsing mount : {'Type': 'bind', 'Source': '/etc/localtime', 'Destination': '/etc/localtime', 'Mode': '', 'RW': False,
'Propagation': 'rprivate'}
[D] Parsing mount : {'Type': 'bind', 'Source': '/Users/charlie/.exegol/my-resources', 'Destination': '/my-resources', 'Mode': '', 'RW':
True, 'Propagation': 'rprivate'}
[D] Parsing mount : {'Type': 'bind', 'Source': '/Users/charlie/Projects/Exegol/exegol-resources', 'Destination': '/opt/resources',
'Mode': '', 'RW': True, 'Propagation': 'rprivate'}
[D] Parsing mount : {'Type': 'bind', 'Source': '/tmp/.X11-unix', 'Destination': '/tmp/.X11-unix', 'Mode': '', 'RW': True,
'Propagation': 'rprivate'}
[D] Parsing mount : {'Type': 'bind', 'Source': '/Users/charlie/Downloads/lab_Shutdown.ovpn', 'Destination': '/vpn/config/client.ovpn',
'Mode': '', 'RW': False, 'Propagation': 'rprivate'}
[D] Loading VPN config: lab_Shutdown.ovpn
[D] Try to retrieve image version from labels
[D] └── local   → (local) N/A

⭐ Container summary
┌──────────────────┬───────────────────────────────────────────────────────────────────────────┐
│             Name │ htb-forest                                                                │
│            Image │ local - v.local (Local image)                                             │
├──────────────────┼───────────────────────────────────────────────────────────────────────────┤
│              GUI │ On ✔                                                                      │
│          Network │ bridge with VPN                                                           │
│         Timezone │ On ✔                                                                      │
│ Exegol resources │ On ✔ (/opt/resources)                                                     │
│     My resources │ On ✔ (/my-resources)                                                      │
│    Shell logging │ Off 🪓                                                                    │
│              VPN │ lab_Shutdown.ovpn                                                         │
│       Privileged │ Off ✔                                                                     │
│     Capabilities │ NET_ADMIN                                                                 │
│        Workspace │ Dedicated (/workspace)                                                    │
│          Devices │ /dev/net/tun:/dev/net/tun:rwm                                             │
│             Envs │ DISPLAY=host.docker.internal:0                                            │
│                  │ _JAVA_AWT_WM_NONREPARENTING=1                                             │
│                  │ QT_X11_NO_MITSHM=1                                                        │
│                  │ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin         │
│          Volumes │ /Users/charlie/.exegol/workspaces/htb-forest ➡ /workspace                 │
│                  │ /etc/localtime ➡ /etc/localtime (RO)                                      │
│                  │ /Users/charlie/.exegol/my-resources ➡ /my-resources                       │
│                  │ /Users/charlie/Projects/Exegol/exegol-resources ➡ /opt/resources          │
│                  │ /tmp/.X11-unix ➡ /tmp/.X11-unix                                           │
│                  │ /Users/charlie/Downloads/lab_Shutdown.ovpn ➡ /vpn/config/client.ovpn (RO) │
│         Systctls │ net.ipv6.conf.all.disable_ipv6 = 0                                        │
└──────────────────┴───────────────────────────────────────────────────────────────────────────┘
MacBook Pro ~ $ docker inspect exegol-htb-forest
[
    {
        "Id": "8e78a51712a1da09eeb498d8adb43476eb4b0da272b84fb0e9acdd75fbf296ee",
        "Created": "2022-06-21T13:50:01.060898087Z",
        "Path": "bash",
        "Args": [
            "-c",
            "cd /vpn/config; openvpn --config /vpn/config/client.ovpn | tee /var/log/vpn.log; bash"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 255,
            "Error": "",
            "StartedAt": "2022-06-21T18:17:00.181699213Z",
            "FinishedAt": "2022-06-22T09:31:51.869414875Z"
        },
        "Image": "sha256:03ef9d8db3e8f24ece4c1106e84a672e7860869e24eb7b95675be9bff121d5dd",
        "ResolvConfPath": "/var/lib/docker/containers/8e78a51712a1da09eeb498d8adb43476eb4b0da272b84fb0e9acdd75fbf296ee/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/8e78a51712a1da09eeb498d8adb43476eb4b0da272b84fb0e9acdd75fbf296ee/hostname",
        "HostsPath": "/var/lib/docker/containers/8e78a51712a1da09eeb498d8adb43476eb4b0da272b84fb0e9acdd75fbf296ee/hosts",
        "LogPath": "/var/lib/docker/containers/8e78a51712a1da09eeb498d8adb43476eb4b0da272b84fb0e9acdd75fbf296ee/8e78a51712a1da09eeb498d8adb43476eb4b0da272b84fb0e9acdd75fbf296ee-json.log",
        "Name": "/exegol-htb-forest",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "bridge",
            "PortBindings": null,
            "RestartPolicy": {
                "Name": "",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": [
                "NET_ADMIN"
            ],
            "CapDrop": null,
            "CgroupnsMode": "private",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Sysctls": {
                "net.ipv6.conf.all.disable_ipv6": "0"
            },
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [
                {
                    "PathOnHost": "/dev/net/tun",
                    "PathInContainer": "/dev/net/tun",
                    "CgroupPermissions": "rwm"
                }
            ],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": null,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "Mounts": [
                {
                    "Type": "bind",
                    "Source": "/tmp/.X11-unix",
                    "Target": "/tmp/.X11-unix"
                },
                {
                    "Type": "bind",
                    "Source": "/etc/localtime",
                    "Target": "/etc/localtime",
                    "ReadOnly": true
                },
                {
                    "Type": "bind",
                    "Source": "/Users/charlie/.exegol/my-resources",
                    "Target": "/my-resources"
                },
                {
                    "Type": "bind",
                    "Source": "/Users/charlie/Projects/Exegol/exegol-resources",
                    "Target": "/opt/resources"
                },
                {
                    "Type": "bind",
                    "Source": "/Users/charlie/Downloads/lab_Shutdown.ovpn",
                    "Target": "/vpn/config/client.ovpn",
                    "ReadOnly": true
                },
                {
                    "Type": "bind",
                    "Source": "/Users/charlie/.exegol/workspaces/htb-forest",
                    "Target": "/workspace"
                }
            ],
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/eb03bc9d5de499e56042cb8e92b54bc67e7fe39de0c2b392b6ea1459c668f9cc-init/diff:/var/lib/docker/overlay2/a84699789ac3baa877c4e5e698eead0b6a94a5d706b77c375218ad56d4953d77/diff:/var/lib/docker/overlay2/cf49047d5ad00422b14dc900ac4e6985afe2bc652daf4bff8843f4310e74e916/diff:/var/lib/docker/overlay2/d86620f9e0b88d110e4a0b83b999f3226c4ec52f0244a8e269c593b84433b736/diff:/var/lib/docker/overlay2/d7cad6bba1be468d5aea25d545e0155eb7d8a38fac36cbe9dbf99fc72d65a61b/diff:/var/lib/docker/overlay2/b564cee377ab67208b503715289d9bd05154cbfef2c56ea9098550bad49cc323/diff:/var/lib/docker/overlay2/7f93be582dc4ee5312527e03073f1854485a8738dc14cd288189d411e70606dc/diff:/var/lib/docker/overlay2/e842c9279b24c02c69bbeb94e1a52ae875756675e16fe03b154aee8cce2b0bf6/diff:/var/lib/docker/overlay2/c4f978768d0dde55a945bce648370448c121d26b481b1b0ef88573dc3690cdc6/diff:/var/lib/docker/overlay2/6f0c42480dff9e30c5eacb308e62c08cfbed59f74d59960694122baf1de19319/diff:/var/lib/docker/overlay2/fe58721c2bc4c93d04d5e8e3b6c89a39666e248cd57f2b8caf11709cb02cd287/diff:/var/lib/docker/overlay2/d8e911c2747169d828e88abddeabc50c7d5f409b609f1356d13faf6837a944cb/diff:/var/lib/docker/overlay2/81d5a8b9dd903fc872c62b4b6b9d2ff1f6b99d5c3abdf3947bf6448c2104fdc4/diff:/var/lib/docker/overlay2/4a91db227070c348e1bd657c40b8b422a985edf37d14236717c39698baf6754a/diff:/var/lib/docker/overlay2/caa2791cea0d4cbc7df9b4783c13c2d2aa096502f7f50ff63e6850a7f723445e/diff:/var/lib/docker/overlay2/1186bacdfb1922232a03944b0dc9df5ba0675e702539d4a23c503055b1364675/diff:/var/lib/docker/overlay2/ef1a1b4306d289c3724c0d3dcab3c3dd604f15a7359674f4bc58cff6fd17c952/diff:/var/lib/docker/overlay2/cfa5bc12618374428589c26d113cdd216d2d0c586f1e13a373fa2922d2260e03/diff:/var/lib/docker/overlay2/9ae60df23848682773ea392286373ca7ba393df1e0e6c050feff683e2b6d7ab6/diff:/var/lib/docker/overlay2/af5e07ba29b6769b7f959cd0290de97aa57f1ed152fbad593af43791e0148864/diff:/var/lib/docker/overlay2/bd61af81ac350f1b567a046d0f8904e45a9e62a80dc8876118489cd916180f74/diff:/var/lib/docker/overlay2/1b93e5dacd54e5f7243dae23f6a276e18f7e126c10596685e83aff9b93d89ae9/diff:/var/lib/docker/overlay2/e041c62948fd1a42d529ba0f899b8d0984c957cf1297b5713035d8725eeae944/diff:/var/lib/docker/overlay2/af02f2c4f1f8928206561463f318abac5b644cf3a2efd737eb6798af4866fe91/diff:/var/lib/docker/overlay2/f918f20ea6126bdaed3e1edf08068203f585cc6795e2a0e568cd769820a381e3/diff:/var/lib/docker/overlay2/2625fea8ee2be6599d8ee6490582f268a188fa63fb1ae7bdd0d31d113561b213/diff:/var/lib/docker/overlay2/24e4c6246d6fff84906a134c9390b44d91930cfc3532c8fc17eee14ea1ce1c39/diff:/var/lib/docker/overlay2/7971a984c344820c508bb1bc0359a767edd55e58b1cdff7da83e935f58946276/diff",
                "MergedDir": "/var/lib/docker/overlay2/eb03bc9d5de499e56042cb8e92b54bc67e7fe39de0c2b392b6ea1459c668f9cc/merged",
                "UpperDir": "/var/lib/docker/overlay2/eb03bc9d5de499e56042cb8e92b54bc67e7fe39de0c2b392b6ea1459c668f9cc/diff",
                "WorkDir": "/var/lib/docker/overlay2/eb03bc9d5de499e56042cb8e92b54bc67e7fe39de0c2b392b6ea1459c668f9cc/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/etc/localtime",
                "Destination": "/etc/localtime",
                "Mode": "",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/charlie/.exegol/my-resources",
                "Destination": "/my-resources",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/charlie/Projects/Exegol/exegol-resources",
                "Destination": "/opt/resources",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/tmp/.X11-unix",
                "Destination": "/tmp/.X11-unix",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/charlie/Downloads/lab_Shutdown.ovpn",
                "Destination": "/vpn/config/client.ovpn",
                "Mode": "",
                "RW": false,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/charlie/.exegol/workspaces/htb-forest",
                "Destination": "/workspace",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        "Config": {
            "Hostname": "exegol-htb-forest",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": false,
            "Env": [
                "DISPLAY=host.docker.internal:0",
                "_JAVA_AWT_WM_NONREPARENTING=1",
                "QT_X11_NO_MITSHM=1",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "bash",
                "-c",
                "cd /vpn/config; openvpn --config /vpn/config/client.ovpn | tee /var/log/vpn.log; bash"
            ],
            "Image": "nwodtuhs/exegol:local",
            "Volumes": null,
            "WorkingDir": "/workspace",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.exegol.app": "Exegol",
                "org.exegol.build_date": "2022-05-29T20:28:35Z",
                "org.exegol.src_repository": "https://github.com/ShutdownRepo/Exegol-images",
                "org.exegol.tag": "arm64",
                "org.exegol.version": "local"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "9a4687d332daf71536e6721377ee9d563dc93b7e27d17d6aefb97c716f62083e",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/9a4687d332da",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "82601e4f35a06a113e74e26107db81c886bc9e05a58e3e7d02fe539f2b10e2ac",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "f604b27308c84d73bf4d01ace80b846147dea78641bdf748e9e85bbaa0d4dcfb",
                    "EndpointID": "82601e4f35a06a113e74e26107db81c886bc9e05a58e3e7d02fe539f2b10e2ac",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

from exegol.

Dramelac avatar Dramelac commented on July 26, 2024

It seems that your tzdata (or equivalent) package has been updated since the creation of your container, leading to the modification of your /etc/localtime file
The strange behavior is that /etc/localtime is a symlink to /var/db/timezone/zoneinfo/Europe/Paris and after the update the container seems to have kept the file previously targeted: /var/db/timezone/tz/2022a.1.0/zoneinfo/Europe/Paris

I don't know why docker desktop solved the symlink when creating the container..

If the need is blocking, just create a new symlink with the previous path to /etc/localtime otherwise recreating the container is the best option.

It remains to be seen if this behavior occurs at each update of the package or if it was a unique change.

from exegol.

Dramelac avatar Dramelac commented on July 26, 2024

After investigation it is a behavior of docker desktop that does not correctly handle volumes that rely on symlink.
This bug should be reported to docker.

from exegol.

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.