{"id":27137941,"url":"https://github.com/ragul-tr/raylibcontainer","last_synced_at":"2025-04-10T00:22:04.643Z","repository":{"id":286459156,"uuid":"961393918","full_name":"RAGUL-TR/RayLibContainer","owner":"RAGUL-TR","description":"A containerized development environment for game development using Raylib on Docker. This repo provides Dockerfiles and instructions to run and build Raylib projects with both hardware acceleration and software rendering options.","archived":false,"fork":false,"pushed_at":"2025-04-06T16:15:43.000Z","size":553,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-06T16:33:53.657Z","etag":null,"topics":["container","developer-tools","development","development-environment","docker","gcc","graphics","raylib","x11"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RAGUL-TR.png","metadata":{"files":{"readme":"readme-pt.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-06T12:33:55.000Z","updated_at":"2025-04-06T16:15:46.000Z","dependencies_parsed_at":"2025-04-06T16:43:58.594Z","dependency_job_id":null,"html_url":"https://github.com/RAGUL-TR/RayLibContainer","commit_stats":null,"previous_names":["ragul-tr/raylibcontainer"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RAGUL-TR%2FRayLibContainer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RAGUL-TR%2FRayLibContainer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RAGUL-TR%2FRayLibContainer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RAGUL-TR%2FRayLibContainer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RAGUL-TR","download_url":"https://codeload.github.com/RAGUL-TR/RayLibContainer/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247779792,"owners_count":20994570,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container","developer-tools","development","development-environment","docker","gcc","graphics","raylib","x11"],"created_at":"2025-04-08T04:37:20.828Z","updated_at":"2025-04-08T04:37:21.425Z","avatar_url":"https://github.com/RAGUL-TR.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Raylib on Docker (Container)\n\n**[English Version](readme.md)**\n\nContainer focado no desenvolvimento de jogos com [Raylib](https://www.raylib.com/). O objetivo é fornecer um ambiente de desenvolvimento consistente e isolado, minimizando problemas de configuração no sistema hospedeiro (host).\n\nVocê pode ver a imagem do Container aqui: \\\n[Raylib-Container](https://hub.docker.com/r/gmaia325/raylib_container)\n\n\u003e **Você está usando macOS?** Siga o [Guia de Compatibilidade MacOS](MacOSX-Compatibility-pt.md) para instruções específicas.\n\n## Pré-requisitos\n\nAntes de usar o container, você precisa configurar seu sistema hospedeiro para permitir a execução de aplicações gráficas do container e para gerenciar o Docker sem `sudo` (recomendado).\n\n### 1. Habilitando Acesso ao Display X11/Wayland\n\nPermita que containers Docker locais se conectem ao seu servidor gráfico (X11 ou Wayland via XWayland).\n\n```bash\n# Permite conexões do Docker\nxhost +local:docker\n```\n\n\u003e **Nota:** Este comando geralmente precisa ser executado a cada nova sessão do seu ambiente gráfico ou após reiniciar o sistema. Você pode adicioná-lo aos seus scripts de inicialização (como `.profile`, `.xinitrc`, etc.) se desejar.\n\n### 2. Adicionando seu Usuário ao Grupo Docker (Recomendado)\n\nAdicionar seu usuário ao grupo docker com o comando abaixo geralmente remove a necessidade de usar `sudo` para executar comandos docker:\n```bash\nsudo usermod -aG docker $USER\n```\nNo entanto, é importante mencionar que, dependendo da configuração específica da sua distribuição Linux, pode haver situações (por exemplo, ao tentar interagir com a interface gráfica ou \"abrir o display\" a partir de um container) onde o uso de `sudo` ainda se faça necessário para algumas tarefas, independentemente de o usuário pertencer ao grupo docker.\n\n\u003e **Importante:** Após executar este comando, você **precisa fazer logout e login novamente** ou **reiniciar o sistema** para que a mudança de grupo tenha efeito.\n\n## Construindo a Imagem (Se necessário)\n\nSe você ainda não tem a imagem Docker localmente, ou se deseja atualizá-la (por exemplo, após modificar o `Dockerfile` ou para obter uma nova versão do Raylib), use o comando `build`:\n\n```bash\n# Navegue até o diretório que contém o arquivo 'Dockerfile'\n# cd /caminho/para/o/projeto\ndocker build -t raylib_container .\n```\n\n\u003e **Raylib Atualizado:** Ao construir a imagem, o Raylib é clonado e compilado diretamente do repositório oficial do GitHub, garantindo que você sempre terá a versão mais recente disponível.\n\n## Executando o Container\n\nPara iniciar um container interativo com acesso ao seu display e com o código do seu projeto montado:\n\n**Opção 1: Com Aceleração de Hardware Gráfico (Recomendado)**\n\nEsta opção tenta usar a GPU do seu sistema hospedeiro para melhor performance.\n\n```bash\ndocker run -it --rm \\\n    -e DISPLAY=$DISPLAY \\\n    -v /tmp/.X11-unix:/tmp/.X11-unix \\\n    -v ./user_code:/app/user_code \\\n    --device /dev/dri:/dev/dri \\\n    raylib_container\n```\n\n**Opção 2: Com Renderização via Software (Fallback)**\n\nUse esta opção se a aceleração de hardware não funcionar (você pode ver erros relacionados a `dri`, `glx`, `mesa` ou drivers gráficos). A performance será menor.\n\n```bash\ndocker run -it --rm \\\n    -e DISPLAY=$DISPLAY \\\n    -v /tmp/.X11-unix:/tmp/.X11-unix \\\n    -v ./user_code:/app/user_code \\\n    -e LIBGL_ALWAYS_SOFTWARE=1 \\\n    raylib_container\n```\n\n**Explicação dos Parâmetros:**\n\n- `-it`: Inicia o container em modo interativo com um terminal.\n- `--rm`: Remove o container automaticamente quando ele for finalizado.\n- `-e DISPLAY=$DISPLAY`: Passa a variável de ambiente `DISPLAY` do host para o container, indicando qual tela usar.\n- `-v /tmp/.X11-unix:/tmp/.X11-unix`: Monta o socket do X11 do host dentro do container, permitindo a comunicação gráfica.\n- `-v ./user_code:/app/user_code`: Monta um diretório chamado `user_code` (que será criado no diretório atual do host se não existir) dentro do container em `/app/user_code`. **Este é o local onde você deve colocar o código-fonte do seu jogo.** Os arquivos são sincronizados entre o host e o container.\n- `--device /dev/dri:/dev/dri` (Opção 1): Mapeia os dispositivos de renderização direta (Direct Rendering Infrastructure) do host para o container, permitindo o acesso à GPU.\n- `-e LIBGL_ALWAYS_SOFTWARE=1` (Opção 2): Força a biblioteca gráfica Mesa a usar renderização por software (CPU).\n- `raylib_container`: O nome da imagem Docker a ser usada.\n\n## Verificando a Conexão Gráfica\n\nUma vez dentro do terminal do container (após executar `docker run`), teste se a conexão gráfica está funcionando:\n\n```bash\nxeyes\n```\n\nUma janela com olhos que seguem o mouse deve aparecer. Você pode fechá-la (geralmente clicando com o botão direito ou fechando a janela normalmente).\n\n## Desenvolvendo Dentro do Container\n\nSeu código-fonte deve ser colocado na pasta `user_code` no seu sistema hospedeiro, que está mapeada para `/app/user_code` dentro do container. O container já tem o GCC e as bibliotecas Raylib instaladas.\n\n**Exemplo de Compilação:**\n\nNavegue até o diretório do seu código dentro do container (`cd /app/user_code` se necessário) e compile seu arquivo C:\n\n```bash\n# Exemplo para um arquivo chamado 'meu_jogo.c'\ngcc meu_jogo.c -o meu_jogo -lraylib -lGL -lm -lpthread -ldl -lrt -lX11\n```\n\n\u003e **Nota:** As bibliotecas (`-l...`) podem variar ligeiramente dependendo das funcionalidades do Raylib que você usar.\n\n**Executando o Programa Compilado:**\n\n```bash\n./meu_jogo\n```\n\n## Revertendo as Configurações do Host\n\nCaso queira reverter as alterações feitas nos pré-requisitos:\n\n1.  **Revogar Acesso ao Display:**\n\n    ```bash\n    xhost -local:docker\n    ```\n\n2.  **Remover Usuário do Grupo Docker:**\n\n    ```bash\n    sudo gpasswd -d $USER docker\n    ```\n\n    \u003e Lembre-se de fazer logout/login ou reiniciar após isso.\n\n3.  **Permissões do Socket Docker:**\n    - **Não altere as permissões do socket Docker (`/var/run/docker.sock`) para `666`!** Isso é uma falha grave de segurança. A maneira correta e segura de evitar o `sudo` é adicionar seu usuário ao grupo `docker` (Pré-requisito 2).\n    - Se você _acidentalmente_ alterou as permissões, o padrão geralmente é `660` com proprietário `root` e grupo `docker`. Você pode tentar restaurar com:\n      ```bash\n      # Apenas se você alterou as permissões incorretamente antes!\n      sudo chmod 660 /var/run/docker.sock\n      sudo chown root:docker /var/run/docker.sock\n      ```\n    - Mas a melhor abordagem é **nunca** usar `chmod 666` no socket.\n\n## Troubleshooting\n\n- **Erro `docker: Cannot connect to the Docker daemon... Permission denied.`:** Você provavelmente não adicionou seu usuário ao grupo `docker` ou não fez logout/login após adicioná-lo. Tente usar `sudo docker ...` ou siga o Pré-requisito 2.\n- **Erro `docker: invalid reference format`:** Verifique se o nome da imagem (`raylib_container`) está digitado corretamente no comando `docker run` e se a imagem realmente existe (verifique com `docker images`).\n- **Janela não aparece / Erro `cannot open display: :0`:** Verifique se você executou `xhost +local:docker` na sessão gráfica atual do host. Verifique também se a variável `DISPLAY` está sendo passada corretamente (`-e DISPLAY=$DISPLAY`).\n- **Erro `MESA: error: Failed to query drm device.`, `glx: failed to create dri3 screen`, `failed to load driver: iris/radeon/etc.`:** A aceleração de hardware não está funcionando. Certifique-se de que a flag `--device /dev/dri:/dev/dri` foi usada. Se ainda falhar, tente a **Opção 2** do `docker run` (renderização via software com `-e LIBGL_ALWAYS_SOFTWARE=1`).\n- **Necessário Reconstruir a Imagem:** Se a imagem parecer desatualizada ou corrompida, reconstrua-a:\n  ```bash\n  docker build -t raylib_container .\n  ```\n  ou se preferir:\n\n```bash\n    docker build --pull --rm -f 'Dockerfile' -t 'raylib_container:test' '.'\n```\n\nSe você tiver algum problema com esta documentação, sinta-se à vontade para abrir uma issue no repositório do projeto.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragul-tr%2Fraylibcontainer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fragul-tr%2Fraylibcontainer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fragul-tr%2Fraylibcontainer/lists"}