Programação com Objectos/Projecto de Programação com Objectos/Máquina Virtual e Contentores
From Wiki**3
| AVISOS - Avaliação em Época Normal |
|---|
|
Esclarecimento de dúvidas:
|
|
Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Programação com Objectos):
|
|
Processo de avaliação (ver informação completa em Avaliação do Projecto):
|
| Material de Uso Obrigatório |
|---|
| As bibliotecas po-uilib e o conteúdo inicial do repositório GIT são de uso obrigatório: |
|
| A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio. |
| Uso Obrigatório: Repositório GIT |
| Apenas se consideram para avaliação os projectos existentes no repositório GIT oficial.
Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho. |
Máquina Virtual
A máquina virtual da disciplina é baseada em openSUSE Tumbleweed. Este ambiente é providenciado como conveniência e não é estritamente necessário: outros ambientes com as versões adequadas de Java e de clientes GIT poderão ser utilizados (mas ver avisos abaixo). Em alternativa à máquina virtual, existe também um contentor com o mesmo ambiente (ver secção Contentores).
A versão mais recente da máquina virtual da disciplina, poo 2026.08 está disponível em:
A máquina virtual é fornecida nos formatos VMDK (VMware, VirtualBox), VHD (Microsoft HyperV) e qcow2 (KVM e outros).
A máquina permite configurações básicas (password de root, etc.) no primeiro arranque. Existe um utilizador normal chamado "poo" (password "linux").
A máquina vem sem ambiente gráfico, mas é simples instalar um com a ferramenta "yast".
Aplicação Exemplo/Tutorial: Banco
A máquina virtual contém os JARs da aplicação bancária: uma aplicação exemplo/tutorial completamente implementada e que tem a mesma estrutura do projecto.
Contentores (docker & podman)
Embora as máquinas virtuais permitam reproduzir o ambiente de testes, os contentores permitem correr os testes sem ser necessária virtualização explícita.
O contentor contém exactamente o mesmo ambiente de desenvolvimento da máquina virtual (mesma versão de Java, mesmas ferramentas e os mesmos pacotes da disciplina), mas arranca em segundos, ocupa menos espaço e não exige a configuração de uma máquina virtual.
A imagem oficial da disciplina está disponível em:
registry.opensuse.org/home/d4vid/po26/images/poo:latest
A imagem é construída para as arquitecturas x86_64 e aarch64, pelo que funciona nativamente tanto em computadores com processadores Intel/AMD como em computadores ARM (por exemplo, Apple Silicon). Não é necessário indicar a arquitectura: o pull escolhe automaticamente a variante correcta.
Obter a imagem
podman pull registry.opensuse.org/home/d4vid/po26/images/poo:latest
Com o docker, basta substituir podman por docker em todos os comandos desta secção.
Utilização interactiva
A forma habitual de trabalhar é montar o directório do projecto dentro do contentor:
podman run --rm -it \
-v "$PWD":/work:z -w /work \
registry.opensuse.org/home/d4vid/po26/images/poo:latest /bin/bash
O directório corrente da máquina do aluno passa a estar acessível em /work dentro do contentor, que é também o directório de trabalho inicial. Os ficheiros são partilhados: o que for editado fora do contentor (por exemplo, num IDE) é imediatamente visível lá dentro, e vice-versa. A opção --rm faz com que o contentor seja descartado no fim, sem deixar lixo no sistema.
Notas de portabilidade:
- Em Windows PowerShell, usar
${PWD}em vez de"$PWD". - O sufixo
:zsó é necessário em sistemas com SELinux (Fedora, RHEL, openSUSE com SELinux activo); noutros sistemas pode ser omitido.
Permissões dos ficheiros
Por omissão o contentor corre como root, pelo que os ficheiros criados lá dentro podem ficar com dono errado no sistema do aluno. Para evitar isso:
# podman
podman run --rm -it --userns=keep-id \
-v "$PWD":/work:z -w /work \
registry.opensuse.org/home/d4vid/po26/images/poo:latest /bin/bash
# docker
docker run --rm -it -u "$(id -u):$(id -g)" \
-v "$PWD":/work -w /work \
registry.opensuse.org/home/d4vid/po26/images/poo:latest /bin/bash
Conteúdo da imagem
A imagem inclui, entre outros:
- JDK 26 (
javaejavac); - os pacotes da disciplina, incluindo
po-uilibe os JARs da aplicação bancária; gite clientes SSH;make,gcc,zsh,python3e utilitários de linha de comandos;- localização
en_US.UTF-8e fuso horárioEurope/Lisbon.
Utilização em integração contínua
A mesma imagem pode ser usada directamente em pipelines de CI. Num ficheiro .gitlab-ci.yml basta:
image: registry.opensuse.org/home/d4vid/po26/images/poo:latest
Como todas as ferramentas já estão instaladas, não é necessário instalar pacotes no início de cada execução.
Ver exemplo aqui: https://gitlab.rnl.tecnico.ulisboa.pt/leic-a-po26/eval/po26
Curiosidades e Outras Aplicações
A máquina virtual e os contentores podem ser úteis noutros contextos e leitores interessados podem aceder às definições de construção no "build service" (a mesma descrição KIWI produz as imagens de máquina virtual e o contentor):