<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Analucia</id>
		<title>VeRLab Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.verlab.dcc.ufmg.br/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Analucia"/>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php/Special:Contributions/Analucia"/>
		<updated>2026-05-19T16:44:12Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Trabalhando_remotamente&amp;diff=1251</id>
		<title>Trabalhando remotamente</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Trabalhando_remotamente&amp;diff=1251"/>
				<updated>2023-10-08T02:17:08Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A seguir, algumas dicas para quem precisar usar a infraestrutura dos laboratórios de maneira remota.&lt;br /&gt;
&lt;br /&gt;
Se você estiver de fora da rede do DCC (por exemplo, da sua casa e sem usar VPN), é necessário fazer login primeiro na máquina login.dcc.ufmg.br, para depois entrar na máquina específica do laboratório com que se quer trabalhar (e.g., roomba, epona).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acessando máquinas via SSH (shell) ==&lt;br /&gt;
&lt;br /&gt;
É possível usar o recurso de ''jump host'' do SSH para conectar na máquina desejada (e.g., roomba) passando por outra que esteja no caminho (e.g, login.dcc.ufmg.br).&lt;br /&gt;
&lt;br /&gt;
Em linha de comando, podemos fazer:&lt;br /&gt;
&lt;br /&gt;
 ssh -J SEU_USUARIO_DCC@login.dcc.ufmg.br SEU_USUARIO_VERLAB@NOME_DA_MAQUINA.verlab&lt;br /&gt;
&lt;br /&gt;
Por exemplo, para &amp;lt;code&amp;gt;flavioro&amp;lt;/code&amp;gt; se conectar à '''roomba''':&lt;br /&gt;
&lt;br /&gt;
 ssh -J flavioro@login.dcc.ufmg.br flavioro@roomba.verlab&lt;br /&gt;
&lt;br /&gt;
Ao executar, primeiro será solicitada a senha do usuário do DCC, depois a senha dele no laboratório (se forem diferentes).&lt;br /&gt;
&lt;br /&gt;
== Acessando máquinas via SSH (VSCODE) ==&lt;br /&gt;
&lt;br /&gt;
1. Instale a extensão '''Remote - SSH''' em seu VsCode.&lt;br /&gt;
&lt;br /&gt;
2. Clique no ícone '''Remote Explorer''', que se encontra no menu lateral esquerdo.&lt;br /&gt;
&lt;br /&gt;
3. Certifique-se que a opção Remote Explorer esteja setada com '''Remotes (Tunnels/SSH)'''.&lt;br /&gt;
  [[File:Remote_tunel.png]]&lt;br /&gt;
&lt;br /&gt;
4. Clique em adicionar nova conexão e copie o seguinte comando na aba de input que irá se abrir:&lt;br /&gt;
&lt;br /&gt;
  ssh -J SEU_USUARIO_DCC@login.dcc.ufmg.br SEU_USUARIO_VERLAB@NOME_DA_MAQUINA.verlab&lt;br /&gt;
&lt;br /&gt;
5. Aperte Enter.&lt;br /&gt;
&lt;br /&gt;
6. Clique no primeiro diretório de arquivo de configuração para criá-lo.&lt;br /&gt;
&lt;br /&gt;
7. Clique em Connect.&lt;br /&gt;
  [[File:Host_add.png]]&lt;br /&gt;
&lt;br /&gt;
8. Insira suas credenciais (Primeiro a senha do login.dcc e depois a do laboratório).&lt;br /&gt;
&lt;br /&gt;
== Acessando máquinas via SFTP (nautilus) ==&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot-from-gnome-files.png|500px|right|Screenshot do Gnome Files mostrando a aba &amp;quot;+ Outros Locais&amp;quot;, que permite o usuário &amp;quot;Conectar a servidor&amp;quot;, digitando um endereço SSH (dentre outras formas).]]&lt;br /&gt;
&lt;br /&gt;
Para fazer transferência de arquivos entre a sua máquina e aquela em que você executou seus experimentos, você pode usar SFTP. O Files (antigo Nautilus) do Gnome tem essa funcionalidade. Você pode testar digitando &amp;lt;code&amp;gt;ssh://SEU_USUARIO_DCC@login.dcc.ufmg.br&amp;lt;/code&amp;gt; no campo &amp;quot;Conectar a servidor&amp;quot; e ver que consegue ver os arquivos da sua HOME do DCC (depois de digitar sua senha).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contudo, não é possível usar a funcionalidade de ''jump host'' do SSH tão facilmente pela interface do Files. É necessário configurar o SSH para criar os destinos desejados e, então, acessar usando o nome do destino desejado. Para tanto, vamos precisar:&lt;br /&gt;
&lt;br /&gt;
# Abrir (criando ou alterando) o arquivo de configuração do SSH no seu computador&lt;br /&gt;
# nano ~/.ssh/config&lt;br /&gt;
# Escrever as configurações para (a) compartilhamento de conexão entre ''jumps'', (b) definir destino da rede DCC, definir 1 novo destino para cada máquina desejada do laboratório:&amp;lt;pre&amp;gt;ControlMaster auto&amp;amp;#10;ControlPath   ~/.ssh/control-%h-%p-%r&amp;amp;#10;Host dcc&amp;amp;#10;  HostName login.dcc.ufmg.br&amp;amp;#10;  User SEU_USUARIO_DCC&amp;amp;#10;&amp;amp;#10;Host roomba&amp;amp;#10;  HostName roomba.verlab&amp;amp;#10;  ProxyCommand ssh -W %h:%p dcc&amp;amp;#10;  User SEU_USUARIO_VERLAB&amp;amp;#10;Host wall-e&amp;amp;#10;  HostName 150.164.212.244&amp;amp;#10;  ProxyCommand ssh -W %h:%p dcc&amp;amp;#10;  User SEU_USUARIO_VERLAB&amp;amp;#10;Host NOME_DE_UMA_MAQUINA&amp;amp;#10;  HostName NOME_DE_UMA_MAQUINA&amp;amp;#10;  ProxyCommand ssh -W %h:%p dcc&amp;amp;#10;  User SEU_USUARIO_VERLAB&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Testar o acesso SSH (shell) para a rede do DCC e para os computadores do laboratório desejados:&amp;lt;pre&amp;gt;ssh dcc&amp;amp;#10;# deve pedir sua senha DCC para se conectar à login.dcc.ufmg.br&amp;amp;#10;ssh roomba&amp;amp;#10;#deve pedir primeiro a senha DCC, depois a do laboratório&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Na interface do Files (antigo nautilus), na aba &amp;quot;+ Outros locais&amp;quot;, no campo &amp;quot;Conectar a servidor&amp;quot;, digite &amp;lt;code&amp;gt;ssh://NOME_DE_UMA_MAQUINA&amp;lt;/code&amp;gt;. Por exemplo:&amp;lt;pre&amp;gt;ssh://roomba&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Então, forneça sua senha do DCC&lt;br /&gt;
#* Depois do laboratório&lt;br /&gt;
#* Será possível visualizar, baixar/subir arquivos para sua HOME na máquina em que entrou:&lt;br /&gt;
&lt;br /&gt;
[[File:screenshot-files-mostrando-sftp-para-marvin.png|600px|center|Screenshot do Gnome Files mostrando a aba &amp;quot;+ Outros Locais&amp;quot; conectada à máquina marvin do laboratório, permitindo transmissão de arquivos.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usando tmux ou byobu: multiplexador de terminais ==&lt;br /&gt;
&lt;br /&gt;
* tmux&lt;br /&gt;
** https://www.hostinger.com.br/tutoriais/como-usar-tmux-lista-de-comandos/&lt;br /&gt;
** https://www.makeuseof.com/install-tmux-linux/&lt;br /&gt;
** https://www.makeuseof.com/tag/cheat-sheet-tmux-commands-cheat-sheet/&lt;br /&gt;
** https://itexto.com.br/receitas-da-itexto-como-ter-janelas-em-seu-terminal-usando-tmux/&lt;br /&gt;
&lt;br /&gt;
* byobu&lt;br /&gt;
** https://linuxhint.com/byobu-linux-command/&lt;br /&gt;
** https://opensource.com/article/20/2/byobu-ssh&lt;br /&gt;
** https://aliartiza75.medium.com/what-is-byobu-and-how-to-use-it-b09722008d65&lt;br /&gt;
** https://byobu.org/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Comentario&lt;br /&gt;
Como resolver falha no VT (Virtual TTY console crtl+alt+f3)&lt;br /&gt;
&lt;br /&gt;
https://forums.linuxmint.com/viewtopic.php?f=42&amp;amp;t=168108&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://unix.stackexchange.com/questions/157111/why-are-my-virtual-consoles-completely-blank&lt;br /&gt;
https://unix.stackexchange.com/questions/674373/cant-switch-to-virtual-consoles-as-usual&lt;br /&gt;
&lt;br /&gt;
Erro &lt;br /&gt;
x86/cpu sgx launch control is locked. support sgx virtualization only&lt;br /&gt;
&lt;br /&gt;
https://www.google.com/search?channel=fs&amp;amp;client=ubuntu&amp;amp;q=x86%2Fcpu+sgx+launch+control+is+locked.+support+sgx+virtualization+only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://projectacrn.github.io/2.5/tutorials/sgx_virtualization.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sobre terminais TTY&lt;br /&gt;
&lt;br /&gt;
https://www.makeuseof.com/what-are-linux-virtual-consoles/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://guialinux.uniriotec.br/consoles-virtuais/&lt;br /&gt;
&lt;br /&gt;
http://www.linusakesson.net/programming/tty/&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Comandos Basicos Linux ==&lt;br /&gt;
* https://avantufmg.notion.site/Comandos-B-sicos-Terminal-Linux-491cfabc506248f680b3daedf61fa23c&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=File:Host_add.png&amp;diff=1250</id>
		<title>File:Host add.png</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=File:Host_add.png&amp;diff=1250"/>
				<updated>2023-10-08T02:08:14Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=File:Remote_tunel.png&amp;diff=1249</id>
		<title>File:Remote tunel.png</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=File:Remote_tunel.png&amp;diff=1249"/>
				<updated>2023-10-08T02:05:15Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=File:Remote_ssh.png&amp;diff=1248</id>
		<title>File:Remote ssh.png</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=File:Remote_ssh.png&amp;diff=1248"/>
				<updated>2023-10-08T02:03:06Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity3&amp;diff=1245</id>
		<title>Singularity3</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity3&amp;diff=1245"/>
				<updated>2023-10-02T18:43:41Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: /* 4) Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Singularity CE 3.x (Community Edition) =&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Esta será a versão utilizada na rede VeRLab/JLab a partir de mar/2022, atualmente instalado nas máquinas a v3.10.x'''&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Documentação oficial Singularity CE v3.x ====&lt;br /&gt;
* https://www.sylabs.io/docs/&lt;br /&gt;
* '''User Guide CE v3.10.x '''&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/quick_start.html&lt;br /&gt;
* '''Adm Guide CE v3.10.x ''' (''Apenas para problemas mais específicos de segurança e instalação!'')&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/admin-guide/&lt;br /&gt;
* ''' ''Definition Files'' '''&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/definition_files.html&lt;br /&gt;
** '''Exemplos de ''Definition Files'' ''': https://github.com/sylabs/examples&lt;br /&gt;
** '''Singularity ''Definition Files'' vs. ''Docker file'' ''': https://docs.sylabs.io/guides/3.9/user-guide/singularity_and_docker.html#sec-deffile-vs-dockerfile&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;IMPORTANTE&amp;lt;/span&amp;gt;: Diferença entre os 2 formatos suportados pelo &amp;lt;code&amp;gt;singularity build&amp;lt;/code&amp;gt;: ==&lt;br /&gt;
&lt;br /&gt;
==== '''Pasta &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt;''': &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;INDICADO PARA FASE DE TESTES E MODIFICAÇÕES no container (instalar pacotes)&amp;lt;/span&amp;gt; ====&lt;br /&gt;
* Destinado para desenvolvimento interativo do container, quando ainda precisa fazer testes e não se sabe exatamente as configurações/ferramentas a serem usadas, logo o container pode ter novas instalações e alterações nos pacotes.&lt;br /&gt;
* Vantagem: vários arquivos e sub-pastas que são expansíveis automaticamente conforme os pacotes são instalados (opção --writable). O tamanho do disco é expansível conforme disponibilidade de espaço em disco da máquina host. &lt;br /&gt;
* Desvantagem: Execução mais lenta, muitos arquivos para copiar de uma máquina para outra e reproduzir o experimento &lt;br /&gt;
* writable (ch)root directory called a sandbox for interactive development ( --sandbox option)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== '''Arquivo único, extensão &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''': &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;SOMENTE LEITURA, NÃO é possível editar o container&amp;lt;/span&amp;gt; ====&lt;br /&gt;
* Destinado para fase de experimentos em massa (production)&lt;br /&gt;
* Vantagem: É uma imagem comprimida, ocupa menos espaço em disco e executa mais rápido que um container equivalente no formato sandbox. Também suporta criptografia&lt;br /&gt;
* Desvantagem: Não é possível instalar/modificar pacotes do container. Para instalar/editar algo, tem que transformar em '''&amp;quot;pasta sandbox&amp;quot;'''.&lt;br /&gt;
* compressed read-only Singularity Image File (SIF) format suitable for production (default)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passo a Passo: Uso do Singularity CE v3.x ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Exemplos de interação mais usuais com o container singularity&lt;br /&gt;
&lt;br /&gt;
# Confirmar se a máquina tem singularity instalado e a versão&lt;br /&gt;
# Criar sua pasta de trabalho com seu nome de usuário (storage ou homeLocal)&lt;br /&gt;
# Criar seu container Singularity no formato &amp;quot;pasta sandbox&amp;quot;&lt;br /&gt;
# Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot;&lt;br /&gt;
# Usar o shell do container em modo --writable --no-home (instalar, modificar e testar)&lt;br /&gt;
# Usar o shell em modo &amp;quot;somente leitura&amp;quot; para testar&lt;br /&gt;
# Usar o shell e montar uma pasta do host&lt;br /&gt;
# Converter um container singularity do formato &amp;quot;pasta sandbox&amp;quot; para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''' (imagem compactada)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Conferir se a máquina tem singularity instalado e a versão ====&lt;br /&gt;
    singularity --version&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2) Criar sua pasta de trabalho com seu nome de usuário (storage ou homeLocal) ====&lt;br /&gt;
Deve-se solicitar a um gestor da infraestrutura da rede VeRLab/JLab para criar uma pasta com seu nome de usuário e mudar o proprietário da pasta para seu usuário da rede do Verlab e o grupo DomainUsers (&amp;lt;code&amp;gt;gid=513&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Existem duas opções de locais para armazenar sua pasta de containers singularity:&lt;br /&gt;
* No serviço de storage da rede, na pasta &amp;lt;code&amp;gt;/srv/forge/fulano/&amp;lt;/code&amp;gt; ou  &lt;br /&gt;
* Localemente em alguma máquina, na pasta &amp;lt;code&amp;gt;/homeLocal/fulano&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pasta no serviço de storage: &lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container. &lt;br /&gt;
* Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
    cd /srv/forge &lt;br /&gt;
    mkdir fulano&lt;br /&gt;
    chown -Rv fulano:513 fulano/&lt;br /&gt;
    cd /srv/forge/fulano&lt;br /&gt;
&lt;br /&gt;
Pasta no /homeLocal de alguma máquina:&lt;br /&gt;
    cd /homeLocal&lt;br /&gt;
    mkdir fulano&lt;br /&gt;
    chown -Rv fulano:513 fulano/&lt;br /&gt;
    cd /homeLocal/fulano&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3) Criar seu container Singularity no formato &amp;quot;pasta sandbox&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
O formato sandbox é usado para modificar e instalar pacotes no container&lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox [pasta_destino] [container_origem]&lt;br /&gt;
&lt;br /&gt;
* A base usada na construção do container pode ter várias fontes diferentes online ou local:&lt;br /&gt;
** '''URI docker'''://  container do repositório online no ''Docker Hub'' ([https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Singularity3#Docker_Hub:_Usar_reposit.C3.B3rio_de_M.C3.A1quinas_Container_Prontas.21 Mais dicas sobre usar URI Docker Hub])&lt;br /&gt;
** '''URI library''':// container do repositório online no ''Sylab Container Library''&lt;br /&gt;
** URI shub://  container do repositório online no ''Singularity Hub''&lt;br /&gt;
** ''' caminho para um outro container .sif ''' numa pasta local na própria máquina host&lt;br /&gt;
** '''caminho para um outro container em pasta ''sandbox'' ''' na própria máquina host&lt;br /&gt;
** '''caminho para um ''definition file'' '''no formato Singularity CE&lt;br /&gt;
&lt;br /&gt;
* Alguns exemplos:&lt;br /&gt;
&lt;br /&gt;
Usando o [https://hub.docker.com/_/ubuntu repositório do docker do ubuntu 20] como base para o container&lt;br /&gt;
    sudo singularity build --sandbox my_ubuntu20 docker://index.docker.io/library/ubuntu:20.04&lt;br /&gt;
&lt;br /&gt;
Usando o [https://hub.docker.com/_/python repositório docker do python 3.8] como base para o container (&lt;br /&gt;
    sudo singularity build --sandbox my_ubuntu20_py3 docker://python:3.8-bullseye&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
Como seu container foi criado usando sudo singularity, o ownership da pasta vai ser root:root&lt;br /&gt;
&lt;br /&gt;
'''Deve-se pedir para algum gestor da infraestrutura da rede VeRLab/JLab alterar o ownership da pasta para seu_usuario:DomainUsers''' &lt;br /&gt;
&lt;br /&gt;
a) descobrir o UID do usuário e o GID do grupo DomainUsers com o comando id:&lt;br /&gt;
    id nome_usuario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) mudar o ownership, recursivamente, de todos arquivos da pasta sandbox (-R=recursive, -v=verbose)&lt;br /&gt;
    sudo chown -Rv [uid]:513 pasta_sandbox/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5) Usar o shell do container em modo --writable --no-home (instalar, modificar e testar) ====&lt;br /&gt;
&lt;br /&gt;
Executar seu singularity no formato &amp;quot;pasta sandbox&amp;quot; em &amp;quot;modo escrita&amp;quot; para instalar pacotes.&lt;br /&gt;
&lt;br /&gt;
Também é indicado usar a opção --no-home para não montar a /home/root da máquina host e evitar que os instaladores tentem salvar algo na home da máquina host. &lt;br /&gt;
( Link com [https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#using-no-home-and-containall-flags outras dicas sobre --no-home] )&lt;br /&gt;
&lt;br /&gt;
Se o instalador tentar usar a /home/root, deve-se ler a documentação do instalador para optar por pastas alternativas dentro da estrutura do container como /usr/bin, /usr/local, /opt/&lt;br /&gt;
    sudo singularity shell --writable --no-home my_container/&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; somente quando necessário modificar o container com instalação de pacotes e configuração&lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container e abrir em modo edição. &lt;br /&gt;
* Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) Usar o shell em modo &amp;quot;somente leitura&amp;quot; para testar ====&lt;br /&gt;
Executar seu singularity no formato &amp;quot;pasta sandbox&amp;quot; em modo &amp;quot;somente leitura&amp;quot; para testar:&lt;br /&gt;
    singularity shell my_container/&lt;br /&gt;
Em geral, nesse momento também é necessário montar uma pasta externa ao container para salvar dados e resultados, isso é explicado no pŕoximo item&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== 7) Montar /homeLocal/usuario dentro container para salvar resultados (opção &amp;lt;code&amp;gt; --bind &amp;lt;/code&amp;gt;) ====&lt;br /&gt;
O comportamento padrão do SingularityCE é montar as pastas /home/$USER, /tmp, and $PWD da máquina host dentro do container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#system-defined-bind-paths algumas outras pastas também] ).&lt;br /&gt;
&lt;br /&gt;
Para acessar outros diretórios da máquina host dentro do container usa-se a sintaxe&lt;br /&gt;
    singularity shell --bind [/absolute/path/host/]:[/absolute/path/inside/container]&lt;br /&gt;
&lt;br /&gt;
O caminho de montagem dentro do container é opcional e se for omitido, é usado o mesmo caminho do host, porém o usuário deve ter permissão para acessar a pasta de montagem. No exemplo mostra como deixar o path /homeLocal/fulano acessível  dentro do container em /mnt:&lt;br /&gt;
    singularity shell --bind /homeLocal/fulano:/mnt my_container/&lt;br /&gt;
&lt;br /&gt;
Também é possivel combinar as opções do --bind com --writable --no-home, neste caso, o root precisa ter permissão para acessar a pasta de montagem:&lt;br /&gt;
    sudo singularity shell --writable --no-home --bind /homeLocal/fulano:/mnt my_container/&lt;br /&gt;
&lt;br /&gt;
* link sobre a opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/quick_start.html#working-with-files '''--bind''']&amp;lt;/code&amp;gt;&lt;br /&gt;
* link com [https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#user-defined-bind-points outras dicas sobre --bind])&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 8) Converter um container singularity do formato '''&amp;quot;pasta sandbox&amp;quot;''' para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''' (imagem compactada) ====&lt;br /&gt;
&lt;br /&gt;
Depois de pronta, a máquina container, pode ser convertida do formato &amp;quot;pasta sandbox&amp;quot; para o formato de &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;) isso permite que ela execute mais rápido, reduz o espaço em disco.&lt;br /&gt;
&lt;br /&gt;
O container pronto pode ser armazenado na sua pasta /home/nome_usuario da rede, assim pode ser executada como leitura de qualquer máquina de processamento que o usuário logar.&lt;br /&gt;
&lt;br /&gt;
1) Para converter do formato '''&amp;quot;pasta sandbox&amp;quot;''' para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;'''. [https://sylabs.io/guides/3.9/user-guide/build_a_container.html#converting-containers-from-one-format-to-another Dicas sobre conversão de formatos das máquinas container]:&lt;br /&gt;
    sudo singularity build [container_destino] [container_origem]&lt;br /&gt;
    sudo singularity build my_container-compact.sif my_container/&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitar recursos do container (RAM, Core's, network e etc) ==&lt;br /&gt;
&lt;br /&gt;
É possível criar um arquivo '''cgroups.toml''' e limitar (ou medir) recursos usados pelo container. Por exemplo, limitar o uso de RAM para não esgotar os recursos da máquina host. &lt;br /&gt;
&lt;br /&gt;
Segue o texto original e os links com mais informações:&lt;br /&gt;
&lt;br /&gt;
''The cgroups (control groups) functionality of the Linux kernel allows you to limit and meter the resources used by a process, or group of processes. Using cgroups you can limit memory and CPU usage. You can also rate limit block IO, network IO, and control access to device nodes.''&lt;br /&gt;
&lt;br /&gt;
* https://docs.sylabs.io/guides/3.10/admin-guide/configfiles.html#cgroups-toml&lt;br /&gt;
&lt;br /&gt;
* https://docs.sylabs.io/guides/3.10/admin-guide/configfiles.html&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Hub: Usar repositório de Máquinas Container Prontas! ==&lt;br /&gt;
* Docker Hub: várias imagens prontas com ferramentas instaladas&lt;br /&gt;
&lt;br /&gt;
    https://hub.docker.com/&lt;br /&gt;
&lt;br /&gt;
Por exemplo pode-se buscar no google: &amp;quot;docker hub opencv ubuntu&amp;quot;, uma das respostas será o repositório &lt;br /&gt;
&lt;br /&gt;
    https://hub.docker.com/r/jjanzic/docker-python3-opencv&lt;br /&gt;
&lt;br /&gt;
Para usar um endereço de imagem docker hub e criar seu container singularity, usa-se o '''formato docker://REPOSITORIO:TAGS'''&lt;br /&gt;
&lt;br /&gt;
No caso do repósitório exemplo, ao abrir o link, vai encontrar diversas TAGS listadas na pagina: &lt;br /&gt;
&lt;br /&gt;
    List of available docker tags:&lt;br /&gt;
    opencv-4.1.0 (latest branch)&lt;br /&gt;
    contrib-opencv-4.1.0 (opencv_contrib branch)&lt;br /&gt;
    opencv-4.0.1&lt;br /&gt;
    contrib-opencv-4.0.1&lt;br /&gt;
    opencv-4.0.0&lt;br /&gt;
    contrib-opencv-4.0.0&lt;br /&gt;
    opencv-3.4.2&lt;br /&gt;
    contrib-opencv-3.4.2&lt;br /&gt;
    (...)&lt;br /&gt;
&lt;br /&gt;
Assim para criar o container usando &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; e copiando do repositório exemplo a tag &amp;lt;code&amp;gt;opencv-4.0.1&amp;lt;/code&amp;gt;, tem-se:&lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox opencv-base docker://jjanzic/docker-python3-opencv:opencv-4.0.1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIP: Python Package Installer ==&lt;br /&gt;
O '''Python Package Installer''', também conhecido como PIP, é responsável por instalar os pacotes Python criados pela comunidade. Dentro do singularity + moosefs, ele tem um comportamento anômalo, não instalando nas pastas padrão. Tais pastas &amp;quot;''padrão''&amp;quot; são especificadas diretamente no código-fonte do python, mais precisamente no módulo ''sys''.&lt;br /&gt;
Faz-se portanto necessário utilizar a flag &amp;lt;code&amp;gt;-t/--target&amp;lt;/code&amp;gt; ao instalar os pacotes via pip, apontando para a pasta ''dist-packages'' da distribuição utilizada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; pip install &amp;lt;package&amp;gt; -t /usr/local/lib/python2.7/dist-packages/ &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links dos Comandos Básicos ==&lt;br /&gt;
https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#interact-with-images&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/build_a_container.html#build-a-container '''build''']&amp;lt;/code&amp;gt;: Cria uma imagem para a máquina container&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt; [https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#shell '''shell''']&amp;lt;/code&amp;gt;: Executa a imagem da máquina container e permite a interação no prompt do shell&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#executing-commands '''exec''']&amp;lt;/code&amp;gt;: Executa um comando na máquina container, em segundo plano, e apresenta o resultado no shell da máquina host&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#running-a-container '''run''']&amp;lt;/code&amp;gt;: Executa ações e scripts configurados no container, como se fosse um executável.&lt;br /&gt;
&lt;br /&gt;
* opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/quick_start.html#working-with-files '''--bind''']&amp;lt;/code&amp;gt;: Permite acessar pastas e arquivos (path) da máquina host dentro da máquina container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#user-defined-bind-points outras dicas sobre --bind])&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;'''build'''&amp;lt;/code&amp;gt;: Criar uma máquina container ==&lt;br /&gt;
&lt;br /&gt;
==== Criar uma máquina container editável (para instalar pacotes) ====&lt;br /&gt;
* Deve-se usar um singularity no formato &amp;quot;pasta sandbox&amp;quot; (estrutura de diretórios). [https://www.sylabs.io/guides/2.5.1/user-guide/quick_start.html#sandbox-directory Dicas sobre a opção &amp;lt;code&amp;gt;--sandbox&amp;lt;/code&amp;gt;].&lt;br /&gt;
* Criar singularity sandbox usando o repositório Ubuntu 18.04 do Docker Hub: &lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:20.04&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
* Exemplo singularity sandbox usando um repositório qualquer do dockerhub&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://repository_name:tag&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== outros exemplos menos usados, pois criam container's não editável ====&lt;br /&gt;
* Criar uma máquina container em formato &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt; (read-only) a partir de um repositório Docker Hub: &lt;br /&gt;
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
Deve-se usar o formato &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt; (writable) a partir de um repositório Docker Hub: &lt;br /&gt;
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
* Converter ou Criar uma máquina container em formato de imagem a partir de uma pasta sandbox:&lt;br /&gt;
    sudo singularity build my_ubuntu.sif my_container/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;'''shell'''&amp;lt;/code&amp;gt;: Executar a máquina container e interagir no shell: ==&lt;br /&gt;
&lt;br /&gt;
* Executar a máquina container no shell, sem salvar modificações feitas na sessão:&lt;br /&gt;
    singularity shell my_container/&lt;br /&gt;
    singularity shell my_ubuntu.sif/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;opção '''--writable'''&amp;lt;/code&amp;gt;: Permitir alterar o container em formato pasta sandbox: ==&lt;br /&gt;
&lt;br /&gt;
* Só é possivel alterar um container em formato &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt;, uma boa prática é adicionar a opção --no-home é importante para não ocorrer a montagem automática da /home do root, e evitar que instaladores tentem usar essa pasta para instalação de pacotes.&lt;br /&gt;
    sudo singularity shell --writable --no-home my_container/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;opção '''--bind'''&amp;lt;/code&amp;gt;:Montando pastas da máquina host para acessar dentro da máquina container ==&lt;br /&gt;
A pasta do home do usuário é montada automaticamente pelo singularity dentro da máquina container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#system-defined-bind-paths algumas outras também ] ), mas se for necessário acessar outra pasta no disco da máquina host, deve-se usar a opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/2.5/user-guide/bind_paths_and_mounts.html#specifying-bind-paths --bind]&amp;lt;/code&amp;gt; para indicar o caminho (path) a ser usado. O usuário precisa ter permissão de leitura e escrita na pasta da máquina host.&lt;br /&gt;
&lt;br /&gt;
* Executar a máquina container no shell e montar o caminho /homeLocal/fulano da máquina host dentro da máquina container &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;singularity shell --bind /homeLocal/fulano:/mnt my_container/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity3&amp;diff=1244</id>
		<title>Singularity3</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity3&amp;diff=1244"/>
				<updated>2023-10-02T18:43:20Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: /* 4) Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Singularity CE 3.x (Community Edition) =&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Esta será a versão utilizada na rede VeRLab/JLab a partir de mar/2022, atualmente instalado nas máquinas a v3.10.x'''&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Documentação oficial Singularity CE v3.x ====&lt;br /&gt;
* https://www.sylabs.io/docs/&lt;br /&gt;
* '''User Guide CE v3.10.x '''&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/quick_start.html&lt;br /&gt;
* '''Adm Guide CE v3.10.x ''' (''Apenas para problemas mais específicos de segurança e instalação!'')&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/admin-guide/&lt;br /&gt;
* ''' ''Definition Files'' '''&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/definition_files.html&lt;br /&gt;
** '''Exemplos de ''Definition Files'' ''': https://github.com/sylabs/examples&lt;br /&gt;
** '''Singularity ''Definition Files'' vs. ''Docker file'' ''': https://docs.sylabs.io/guides/3.9/user-guide/singularity_and_docker.html#sec-deffile-vs-dockerfile&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;IMPORTANTE&amp;lt;/span&amp;gt;: Diferença entre os 2 formatos suportados pelo &amp;lt;code&amp;gt;singularity build&amp;lt;/code&amp;gt;: ==&lt;br /&gt;
&lt;br /&gt;
==== '''Pasta &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt;''': &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;INDICADO PARA FASE DE TESTES E MODIFICAÇÕES no container (instalar pacotes)&amp;lt;/span&amp;gt; ====&lt;br /&gt;
* Destinado para desenvolvimento interativo do container, quando ainda precisa fazer testes e não se sabe exatamente as configurações/ferramentas a serem usadas, logo o container pode ter novas instalações e alterações nos pacotes.&lt;br /&gt;
* Vantagem: vários arquivos e sub-pastas que são expansíveis automaticamente conforme os pacotes são instalados (opção --writable). O tamanho do disco é expansível conforme disponibilidade de espaço em disco da máquina host. &lt;br /&gt;
* Desvantagem: Execução mais lenta, muitos arquivos para copiar de uma máquina para outra e reproduzir o experimento &lt;br /&gt;
* writable (ch)root directory called a sandbox for interactive development ( --sandbox option)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== '''Arquivo único, extensão &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''': &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;SOMENTE LEITURA, NÃO é possível editar o container&amp;lt;/span&amp;gt; ====&lt;br /&gt;
* Destinado para fase de experimentos em massa (production)&lt;br /&gt;
* Vantagem: É uma imagem comprimida, ocupa menos espaço em disco e executa mais rápido que um container equivalente no formato sandbox. Também suporta criptografia&lt;br /&gt;
* Desvantagem: Não é possível instalar/modificar pacotes do container. Para instalar/editar algo, tem que transformar em '''&amp;quot;pasta sandbox&amp;quot;'''.&lt;br /&gt;
* compressed read-only Singularity Image File (SIF) format suitable for production (default)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passo a Passo: Uso do Singularity CE v3.x ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Exemplos de interação mais usuais com o container singularity&lt;br /&gt;
&lt;br /&gt;
# Confirmar se a máquina tem singularity instalado e a versão&lt;br /&gt;
# Criar sua pasta de trabalho com seu nome de usuário (storage ou homeLocal)&lt;br /&gt;
# Criar seu container Singularity no formato &amp;quot;pasta sandbox&amp;quot;&lt;br /&gt;
# Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot;&lt;br /&gt;
# Usar o shell do container em modo --writable --no-home (instalar, modificar e testar)&lt;br /&gt;
# Usar o shell em modo &amp;quot;somente leitura&amp;quot; para testar&lt;br /&gt;
# Usar o shell e montar uma pasta do host&lt;br /&gt;
# Converter um container singularity do formato &amp;quot;pasta sandbox&amp;quot; para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''' (imagem compactada)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Conferir se a máquina tem singularity instalado e a versão ====&lt;br /&gt;
    singularity --version&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2) Criar sua pasta de trabalho com seu nome de usuário (storage ou homeLocal) ====&lt;br /&gt;
Deve-se solicitar a um gestor da infraestrutura da rede VeRLab/JLab para criar uma pasta com seu nome de usuário e mudar o proprietário da pasta para seu usuário da rede do Verlab e o grupo DomainUsers (&amp;lt;code&amp;gt;gid=513&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Existem duas opções de locais para armazenar sua pasta de containers singularity:&lt;br /&gt;
* No serviço de storage da rede, na pasta &amp;lt;code&amp;gt;/srv/forge/fulano/&amp;lt;/code&amp;gt; ou  &lt;br /&gt;
* Localemente em alguma máquina, na pasta &amp;lt;code&amp;gt;/homeLocal/fulano&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pasta no serviço de storage: &lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container. &lt;br /&gt;
* Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
    cd /srv/forge &lt;br /&gt;
    mkdir fulano&lt;br /&gt;
    chown -Rv fulano:513 fulano/&lt;br /&gt;
    cd /srv/forge/fulano&lt;br /&gt;
&lt;br /&gt;
Pasta no /homeLocal de alguma máquina:&lt;br /&gt;
    cd /homeLocal&lt;br /&gt;
    mkdir fulano&lt;br /&gt;
    chown -Rv fulano:513 fulano/&lt;br /&gt;
    cd /homeLocal/fulano&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3) Criar seu container Singularity no formato &amp;quot;pasta sandbox&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
O formato sandbox é usado para modificar e instalar pacotes no container&lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox [pasta_destino] [container_origem]&lt;br /&gt;
&lt;br /&gt;
* A base usada na construção do container pode ter várias fontes diferentes online ou local:&lt;br /&gt;
** '''URI docker'''://  container do repositório online no ''Docker Hub'' ([https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Singularity3#Docker_Hub:_Usar_reposit.C3.B3rio_de_M.C3.A1quinas_Container_Prontas.21 Mais dicas sobre usar URI Docker Hub])&lt;br /&gt;
** '''URI library''':// container do repositório online no ''Sylab Container Library''&lt;br /&gt;
** URI shub://  container do repositório online no ''Singularity Hub''&lt;br /&gt;
** ''' caminho para um outro container .sif ''' numa pasta local na própria máquina host&lt;br /&gt;
** '''caminho para um outro container em pasta ''sandbox'' ''' na própria máquina host&lt;br /&gt;
** '''caminho para um ''definition file'' '''no formato Singularity CE&lt;br /&gt;
&lt;br /&gt;
* Alguns exemplos:&lt;br /&gt;
&lt;br /&gt;
Usando o [https://hub.docker.com/_/ubuntu repositório do docker do ubuntu 20] como base para o container&lt;br /&gt;
    sudo singularity build --sandbox my_ubuntu20 docker://index.docker.io/library/ubuntu:20.04&lt;br /&gt;
&lt;br /&gt;
Usando o [https://hub.docker.com/_/python repositório docker do python 3.8] como base para o container (&lt;br /&gt;
    sudo singularity build --sandbox my_ubuntu20_py3 docker://python:3.8-bullseye&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
Como seu container foi criado usando sudo singularity, o ownership da pasta vai ser root:root&lt;br /&gt;
&lt;br /&gt;
'''Deve-se pedir para algum gestor da infraestrutura da rede VeRLab/JLab alterar o ownership para seu_usuario:DomainUsers''' &lt;br /&gt;
&lt;br /&gt;
a) descobrir o UID do usuário e o GID do grupo DomainUsers com o comando id:&lt;br /&gt;
    id nome_usuario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) mudar o ownership, recursivamente, de todos arquivos da pasta sandbox (-R=recursive, -v=verbose)&lt;br /&gt;
    sudo chown -Rv [uid]:513 pasta_sandbox/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5) Usar o shell do container em modo --writable --no-home (instalar, modificar e testar) ====&lt;br /&gt;
&lt;br /&gt;
Executar seu singularity no formato &amp;quot;pasta sandbox&amp;quot; em &amp;quot;modo escrita&amp;quot; para instalar pacotes.&lt;br /&gt;
&lt;br /&gt;
Também é indicado usar a opção --no-home para não montar a /home/root da máquina host e evitar que os instaladores tentem salvar algo na home da máquina host. &lt;br /&gt;
( Link com [https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#using-no-home-and-containall-flags outras dicas sobre --no-home] )&lt;br /&gt;
&lt;br /&gt;
Se o instalador tentar usar a /home/root, deve-se ler a documentação do instalador para optar por pastas alternativas dentro da estrutura do container como /usr/bin, /usr/local, /opt/&lt;br /&gt;
    sudo singularity shell --writable --no-home my_container/&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; somente quando necessário modificar o container com instalação de pacotes e configuração&lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container e abrir em modo edição. &lt;br /&gt;
* Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) Usar o shell em modo &amp;quot;somente leitura&amp;quot; para testar ====&lt;br /&gt;
Executar seu singularity no formato &amp;quot;pasta sandbox&amp;quot; em modo &amp;quot;somente leitura&amp;quot; para testar:&lt;br /&gt;
    singularity shell my_container/&lt;br /&gt;
Em geral, nesse momento também é necessário montar uma pasta externa ao container para salvar dados e resultados, isso é explicado no pŕoximo item&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== 7) Montar /homeLocal/usuario dentro container para salvar resultados (opção &amp;lt;code&amp;gt; --bind &amp;lt;/code&amp;gt;) ====&lt;br /&gt;
O comportamento padrão do SingularityCE é montar as pastas /home/$USER, /tmp, and $PWD da máquina host dentro do container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#system-defined-bind-paths algumas outras pastas também] ).&lt;br /&gt;
&lt;br /&gt;
Para acessar outros diretórios da máquina host dentro do container usa-se a sintaxe&lt;br /&gt;
    singularity shell --bind [/absolute/path/host/]:[/absolute/path/inside/container]&lt;br /&gt;
&lt;br /&gt;
O caminho de montagem dentro do container é opcional e se for omitido, é usado o mesmo caminho do host, porém o usuário deve ter permissão para acessar a pasta de montagem. No exemplo mostra como deixar o path /homeLocal/fulano acessível  dentro do container em /mnt:&lt;br /&gt;
    singularity shell --bind /homeLocal/fulano:/mnt my_container/&lt;br /&gt;
&lt;br /&gt;
Também é possivel combinar as opções do --bind com --writable --no-home, neste caso, o root precisa ter permissão para acessar a pasta de montagem:&lt;br /&gt;
    sudo singularity shell --writable --no-home --bind /homeLocal/fulano:/mnt my_container/&lt;br /&gt;
&lt;br /&gt;
* link sobre a opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/quick_start.html#working-with-files '''--bind''']&amp;lt;/code&amp;gt;&lt;br /&gt;
* link com [https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#user-defined-bind-points outras dicas sobre --bind])&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 8) Converter um container singularity do formato '''&amp;quot;pasta sandbox&amp;quot;''' para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''' (imagem compactada) ====&lt;br /&gt;
&lt;br /&gt;
Depois de pronta, a máquina container, pode ser convertida do formato &amp;quot;pasta sandbox&amp;quot; para o formato de &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;) isso permite que ela execute mais rápido, reduz o espaço em disco.&lt;br /&gt;
&lt;br /&gt;
O container pronto pode ser armazenado na sua pasta /home/nome_usuario da rede, assim pode ser executada como leitura de qualquer máquina de processamento que o usuário logar.&lt;br /&gt;
&lt;br /&gt;
1) Para converter do formato '''&amp;quot;pasta sandbox&amp;quot;''' para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;'''. [https://sylabs.io/guides/3.9/user-guide/build_a_container.html#converting-containers-from-one-format-to-another Dicas sobre conversão de formatos das máquinas container]:&lt;br /&gt;
    sudo singularity build [container_destino] [container_origem]&lt;br /&gt;
    sudo singularity build my_container-compact.sif my_container/&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitar recursos do container (RAM, Core's, network e etc) ==&lt;br /&gt;
&lt;br /&gt;
É possível criar um arquivo '''cgroups.toml''' e limitar (ou medir) recursos usados pelo container. Por exemplo, limitar o uso de RAM para não esgotar os recursos da máquina host. &lt;br /&gt;
&lt;br /&gt;
Segue o texto original e os links com mais informações:&lt;br /&gt;
&lt;br /&gt;
''The cgroups (control groups) functionality of the Linux kernel allows you to limit and meter the resources used by a process, or group of processes. Using cgroups you can limit memory and CPU usage. You can also rate limit block IO, network IO, and control access to device nodes.''&lt;br /&gt;
&lt;br /&gt;
* https://docs.sylabs.io/guides/3.10/admin-guide/configfiles.html#cgroups-toml&lt;br /&gt;
&lt;br /&gt;
* https://docs.sylabs.io/guides/3.10/admin-guide/configfiles.html&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Hub: Usar repositório de Máquinas Container Prontas! ==&lt;br /&gt;
* Docker Hub: várias imagens prontas com ferramentas instaladas&lt;br /&gt;
&lt;br /&gt;
    https://hub.docker.com/&lt;br /&gt;
&lt;br /&gt;
Por exemplo pode-se buscar no google: &amp;quot;docker hub opencv ubuntu&amp;quot;, uma das respostas será o repositório &lt;br /&gt;
&lt;br /&gt;
    https://hub.docker.com/r/jjanzic/docker-python3-opencv&lt;br /&gt;
&lt;br /&gt;
Para usar um endereço de imagem docker hub e criar seu container singularity, usa-se o '''formato docker://REPOSITORIO:TAGS'''&lt;br /&gt;
&lt;br /&gt;
No caso do repósitório exemplo, ao abrir o link, vai encontrar diversas TAGS listadas na pagina: &lt;br /&gt;
&lt;br /&gt;
    List of available docker tags:&lt;br /&gt;
    opencv-4.1.0 (latest branch)&lt;br /&gt;
    contrib-opencv-4.1.0 (opencv_contrib branch)&lt;br /&gt;
    opencv-4.0.1&lt;br /&gt;
    contrib-opencv-4.0.1&lt;br /&gt;
    opencv-4.0.0&lt;br /&gt;
    contrib-opencv-4.0.0&lt;br /&gt;
    opencv-3.4.2&lt;br /&gt;
    contrib-opencv-3.4.2&lt;br /&gt;
    (...)&lt;br /&gt;
&lt;br /&gt;
Assim para criar o container usando &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; e copiando do repositório exemplo a tag &amp;lt;code&amp;gt;opencv-4.0.1&amp;lt;/code&amp;gt;, tem-se:&lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox opencv-base docker://jjanzic/docker-python3-opencv:opencv-4.0.1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIP: Python Package Installer ==&lt;br /&gt;
O '''Python Package Installer''', também conhecido como PIP, é responsável por instalar os pacotes Python criados pela comunidade. Dentro do singularity + moosefs, ele tem um comportamento anômalo, não instalando nas pastas padrão. Tais pastas &amp;quot;''padrão''&amp;quot; são especificadas diretamente no código-fonte do python, mais precisamente no módulo ''sys''.&lt;br /&gt;
Faz-se portanto necessário utilizar a flag &amp;lt;code&amp;gt;-t/--target&amp;lt;/code&amp;gt; ao instalar os pacotes via pip, apontando para a pasta ''dist-packages'' da distribuição utilizada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; pip install &amp;lt;package&amp;gt; -t /usr/local/lib/python2.7/dist-packages/ &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links dos Comandos Básicos ==&lt;br /&gt;
https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#interact-with-images&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/build_a_container.html#build-a-container '''build''']&amp;lt;/code&amp;gt;: Cria uma imagem para a máquina container&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt; [https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#shell '''shell''']&amp;lt;/code&amp;gt;: Executa a imagem da máquina container e permite a interação no prompt do shell&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#executing-commands '''exec''']&amp;lt;/code&amp;gt;: Executa um comando na máquina container, em segundo plano, e apresenta o resultado no shell da máquina host&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#running-a-container '''run''']&amp;lt;/code&amp;gt;: Executa ações e scripts configurados no container, como se fosse um executável.&lt;br /&gt;
&lt;br /&gt;
* opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/quick_start.html#working-with-files '''--bind''']&amp;lt;/code&amp;gt;: Permite acessar pastas e arquivos (path) da máquina host dentro da máquina container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#user-defined-bind-points outras dicas sobre --bind])&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;'''build'''&amp;lt;/code&amp;gt;: Criar uma máquina container ==&lt;br /&gt;
&lt;br /&gt;
==== Criar uma máquina container editável (para instalar pacotes) ====&lt;br /&gt;
* Deve-se usar um singularity no formato &amp;quot;pasta sandbox&amp;quot; (estrutura de diretórios). [https://www.sylabs.io/guides/2.5.1/user-guide/quick_start.html#sandbox-directory Dicas sobre a opção &amp;lt;code&amp;gt;--sandbox&amp;lt;/code&amp;gt;].&lt;br /&gt;
* Criar singularity sandbox usando o repositório Ubuntu 18.04 do Docker Hub: &lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:20.04&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
* Exemplo singularity sandbox usando um repositório qualquer do dockerhub&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://repository_name:tag&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== outros exemplos menos usados, pois criam container's não editável ====&lt;br /&gt;
* Criar uma máquina container em formato &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt; (read-only) a partir de um repositório Docker Hub: &lt;br /&gt;
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
Deve-se usar o formato &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt; (writable) a partir de um repositório Docker Hub: &lt;br /&gt;
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
* Converter ou Criar uma máquina container em formato de imagem a partir de uma pasta sandbox:&lt;br /&gt;
    sudo singularity build my_ubuntu.sif my_container/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;'''shell'''&amp;lt;/code&amp;gt;: Executar a máquina container e interagir no shell: ==&lt;br /&gt;
&lt;br /&gt;
* Executar a máquina container no shell, sem salvar modificações feitas na sessão:&lt;br /&gt;
    singularity shell my_container/&lt;br /&gt;
    singularity shell my_ubuntu.sif/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;opção '''--writable'''&amp;lt;/code&amp;gt;: Permitir alterar o container em formato pasta sandbox: ==&lt;br /&gt;
&lt;br /&gt;
* Só é possivel alterar um container em formato &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt;, uma boa prática é adicionar a opção --no-home é importante para não ocorrer a montagem automática da /home do root, e evitar que instaladores tentem usar essa pasta para instalação de pacotes.&lt;br /&gt;
    sudo singularity shell --writable --no-home my_container/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;opção '''--bind'''&amp;lt;/code&amp;gt;:Montando pastas da máquina host para acessar dentro da máquina container ==&lt;br /&gt;
A pasta do home do usuário é montada automaticamente pelo singularity dentro da máquina container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#system-defined-bind-paths algumas outras também ] ), mas se for necessário acessar outra pasta no disco da máquina host, deve-se usar a opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/2.5/user-guide/bind_paths_and_mounts.html#specifying-bind-paths --bind]&amp;lt;/code&amp;gt; para indicar o caminho (path) a ser usado. O usuário precisa ter permissão de leitura e escrita na pasta da máquina host.&lt;br /&gt;
&lt;br /&gt;
* Executar a máquina container no shell e montar o caminho /homeLocal/fulano da máquina host dentro da máquina container &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;singularity shell --bind /homeLocal/fulano:/mnt my_container/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	<entry>
		<id>http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity3&amp;diff=1243</id>
		<title>Singularity3</title>
		<link rel="alternate" type="text/html" href="http://www.verlab.dcc.ufmg.br/mediawiki/index.php?title=Singularity3&amp;diff=1243"/>
				<updated>2023-10-02T18:43:04Z</updated>
		
		<summary type="html">&lt;p&gt;Analucia: /* 4) Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Singularity CE 3.x (Community Edition) =&lt;br /&gt;
=== &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;'''Esta será a versão utilizada na rede VeRLab/JLab a partir de mar/2022, atualmente instalado nas máquinas a v3.10.x'''&amp;lt;/span&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
==== Documentação oficial Singularity CE v3.x ====&lt;br /&gt;
* https://www.sylabs.io/docs/&lt;br /&gt;
* '''User Guide CE v3.10.x '''&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/quick_start.html&lt;br /&gt;
* '''Adm Guide CE v3.10.x ''' (''Apenas para problemas mais específicos de segurança e instalação!'')&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/admin-guide/&lt;br /&gt;
* ''' ''Definition Files'' '''&lt;br /&gt;
** https://docs.sylabs.io/guides/3.10/user-guide/definition_files.html&lt;br /&gt;
** '''Exemplos de ''Definition Files'' ''': https://github.com/sylabs/examples&lt;br /&gt;
** '''Singularity ''Definition Files'' vs. ''Docker file'' ''': https://docs.sylabs.io/guides/3.9/user-guide/singularity_and_docker.html#sec-deffile-vs-dockerfile&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;IMPORTANTE&amp;lt;/span&amp;gt;: Diferença entre os 2 formatos suportados pelo &amp;lt;code&amp;gt;singularity build&amp;lt;/code&amp;gt;: ==&lt;br /&gt;
&lt;br /&gt;
==== '''Pasta &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt;''': &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;INDICADO PARA FASE DE TESTES E MODIFICAÇÕES no container (instalar pacotes)&amp;lt;/span&amp;gt; ====&lt;br /&gt;
* Destinado para desenvolvimento interativo do container, quando ainda precisa fazer testes e não se sabe exatamente as configurações/ferramentas a serem usadas, logo o container pode ter novas instalações e alterações nos pacotes.&lt;br /&gt;
* Vantagem: vários arquivos e sub-pastas que são expansíveis automaticamente conforme os pacotes são instalados (opção --writable). O tamanho do disco é expansível conforme disponibilidade de espaço em disco da máquina host. &lt;br /&gt;
* Desvantagem: Execução mais lenta, muitos arquivos para copiar de uma máquina para outra e reproduzir o experimento &lt;br /&gt;
* writable (ch)root directory called a sandbox for interactive development ( --sandbox option)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== '''Arquivo único, extensão &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''': &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;SOMENTE LEITURA, NÃO é possível editar o container&amp;lt;/span&amp;gt; ====&lt;br /&gt;
* Destinado para fase de experimentos em massa (production)&lt;br /&gt;
* Vantagem: É uma imagem comprimida, ocupa menos espaço em disco e executa mais rápido que um container equivalente no formato sandbox. Também suporta criptografia&lt;br /&gt;
* Desvantagem: Não é possível instalar/modificar pacotes do container. Para instalar/editar algo, tem que transformar em '''&amp;quot;pasta sandbox&amp;quot;'''.&lt;br /&gt;
* compressed read-only Singularity Image File (SIF) format suitable for production (default)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Passo a Passo: Uso do Singularity CE v3.x ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Exemplos de interação mais usuais com o container singularity&lt;br /&gt;
&lt;br /&gt;
# Confirmar se a máquina tem singularity instalado e a versão&lt;br /&gt;
# Criar sua pasta de trabalho com seu nome de usuário (storage ou homeLocal)&lt;br /&gt;
# Criar seu container Singularity no formato &amp;quot;pasta sandbox&amp;quot;&lt;br /&gt;
# Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot;&lt;br /&gt;
# Usar o shell do container em modo --writable --no-home (instalar, modificar e testar)&lt;br /&gt;
# Usar o shell em modo &amp;quot;somente leitura&amp;quot; para testar&lt;br /&gt;
# Usar o shell e montar uma pasta do host&lt;br /&gt;
# Converter um container singularity do formato &amp;quot;pasta sandbox&amp;quot; para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''' (imagem compactada)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 1) Conferir se a máquina tem singularity instalado e a versão ====&lt;br /&gt;
    singularity --version&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 2) Criar sua pasta de trabalho com seu nome de usuário (storage ou homeLocal) ====&lt;br /&gt;
Deve-se solicitar a um gestor da infraestrutura da rede VeRLab/JLab para criar uma pasta com seu nome de usuário e mudar o proprietário da pasta para seu usuário da rede do Verlab e o grupo DomainUsers (&amp;lt;code&amp;gt;gid=513&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Existem duas opções de locais para armazenar sua pasta de containers singularity:&lt;br /&gt;
* No serviço de storage da rede, na pasta &amp;lt;code&amp;gt;/srv/forge/fulano/&amp;lt;/code&amp;gt; ou  &lt;br /&gt;
* Localemente em alguma máquina, na pasta &amp;lt;code&amp;gt;/homeLocal/fulano&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pasta no serviço de storage: &lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container. &lt;br /&gt;
* Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
    cd /srv/forge &lt;br /&gt;
    mkdir fulano&lt;br /&gt;
    chown -Rv fulano:513 fulano/&lt;br /&gt;
    cd /srv/forge/fulano&lt;br /&gt;
&lt;br /&gt;
Pasta no /homeLocal de alguma máquina:&lt;br /&gt;
    cd /homeLocal&lt;br /&gt;
    mkdir fulano&lt;br /&gt;
    chown -Rv fulano:513 fulano/&lt;br /&gt;
    cd /homeLocal/fulano&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 3) Criar seu container Singularity no formato &amp;quot;pasta sandbox&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
O formato sandbox é usado para modificar e instalar pacotes no container&lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox [pasta_destino] [container_origem]&lt;br /&gt;
&lt;br /&gt;
* A base usada na construção do container pode ter várias fontes diferentes online ou local:&lt;br /&gt;
** '''URI docker'''://  container do repositório online no ''Docker Hub'' ([https://www.verlab.dcc.ufmg.br/mediawiki/index.php/Singularity3#Docker_Hub:_Usar_reposit.C3.B3rio_de_M.C3.A1quinas_Container_Prontas.21 Mais dicas sobre usar URI Docker Hub])&lt;br /&gt;
** '''URI library''':// container do repositório online no ''Sylab Container Library''&lt;br /&gt;
** URI shub://  container do repositório online no ''Singularity Hub''&lt;br /&gt;
** ''' caminho para um outro container .sif ''' numa pasta local na própria máquina host&lt;br /&gt;
** '''caminho para um outro container em pasta ''sandbox'' ''' na própria máquina host&lt;br /&gt;
** '''caminho para um ''definition file'' '''no formato Singularity CE&lt;br /&gt;
&lt;br /&gt;
* Alguns exemplos:&lt;br /&gt;
&lt;br /&gt;
Usando o [https://hub.docker.com/_/ubuntu repositório do docker do ubuntu 20] como base para o container&lt;br /&gt;
    sudo singularity build --sandbox my_ubuntu20 docker://index.docker.io/library/ubuntu:20.04&lt;br /&gt;
&lt;br /&gt;
Usando o [https://hub.docker.com/_/python repositório docker do python 3.8] como base para o container (&lt;br /&gt;
    sudo singularity build --sandbox my_ubuntu20_py3 docker://python:3.8-bullseye&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Corrigir o ownership da sua &amp;quot;pasta sandbox&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
Como seu container foi criado usando sudo singularity, o ownership da pasta vai ser root:root&lt;br /&gt;
'''Deve-se pedir para algum gestor da infraestrutura da rede VeRLab/JLab alterar o ownership para seu_usuario:DomainUsers''' &lt;br /&gt;
&lt;br /&gt;
a) descobrir o UID do usuário e o GID do grupo DomainUsers com o comando id:&lt;br /&gt;
    id nome_usuario&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
b) mudar o ownership, recursivamente, de todos arquivos da pasta sandbox (-R=recursive, -v=verbose)&lt;br /&gt;
    sudo chown -Rv [uid]:513 pasta_sandbox/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 5) Usar o shell do container em modo --writable --no-home (instalar, modificar e testar) ====&lt;br /&gt;
&lt;br /&gt;
Executar seu singularity no formato &amp;quot;pasta sandbox&amp;quot; em &amp;quot;modo escrita&amp;quot; para instalar pacotes.&lt;br /&gt;
&lt;br /&gt;
Também é indicado usar a opção --no-home para não montar a /home/root da máquina host e evitar que os instaladores tentem salvar algo na home da máquina host. &lt;br /&gt;
( Link com [https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#using-no-home-and-containall-flags outras dicas sobre --no-home] )&lt;br /&gt;
&lt;br /&gt;
Se o instalador tentar usar a /home/root, deve-se ler a documentação do instalador para optar por pastas alternativas dentro da estrutura do container como /usr/bin, /usr/local, /opt/&lt;br /&gt;
    sudo singularity shell --writable --no-home my_container/&lt;br /&gt;
&lt;br /&gt;
* Use &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; somente quando necessário modificar o container com instalação de pacotes e configuração&lt;br /&gt;
* Foi escolhido que das máquinas de processamento na rede, apenas '''EPONA, GHOST e MAGRITTE''' serão capazes de criar um container e abrir em modo edição. &lt;br /&gt;
* Outra restrição é que essa permissão só pode ser executada na pasta &amp;lt;code&amp;gt;'''/srv/forge'''&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 6) Usar o shell em modo &amp;quot;somente leitura&amp;quot; para testar ====&lt;br /&gt;
Executar seu singularity no formato &amp;quot;pasta sandbox&amp;quot; em modo &amp;quot;somente leitura&amp;quot; para testar:&lt;br /&gt;
    singularity shell my_container/&lt;br /&gt;
Em geral, nesse momento também é necessário montar uma pasta externa ao container para salvar dados e resultados, isso é explicado no pŕoximo item&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== 7) Montar /homeLocal/usuario dentro container para salvar resultados (opção &amp;lt;code&amp;gt; --bind &amp;lt;/code&amp;gt;) ====&lt;br /&gt;
O comportamento padrão do SingularityCE é montar as pastas /home/$USER, /tmp, and $PWD da máquina host dentro do container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#system-defined-bind-paths algumas outras pastas também] ).&lt;br /&gt;
&lt;br /&gt;
Para acessar outros diretórios da máquina host dentro do container usa-se a sintaxe&lt;br /&gt;
    singularity shell --bind [/absolute/path/host/]:[/absolute/path/inside/container]&lt;br /&gt;
&lt;br /&gt;
O caminho de montagem dentro do container é opcional e se for omitido, é usado o mesmo caminho do host, porém o usuário deve ter permissão para acessar a pasta de montagem. No exemplo mostra como deixar o path /homeLocal/fulano acessível  dentro do container em /mnt:&lt;br /&gt;
    singularity shell --bind /homeLocal/fulano:/mnt my_container/&lt;br /&gt;
&lt;br /&gt;
Também é possivel combinar as opções do --bind com --writable --no-home, neste caso, o root precisa ter permissão para acessar a pasta de montagem:&lt;br /&gt;
    sudo singularity shell --writable --no-home --bind /homeLocal/fulano:/mnt my_container/&lt;br /&gt;
&lt;br /&gt;
* link sobre a opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/quick_start.html#working-with-files '''--bind''']&amp;lt;/code&amp;gt;&lt;br /&gt;
* link com [https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#user-defined-bind-points outras dicas sobre --bind])&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 8) Converter um container singularity do formato '''&amp;quot;pasta sandbox&amp;quot;''' para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;''' (imagem compactada) ====&lt;br /&gt;
&lt;br /&gt;
Depois de pronta, a máquina container, pode ser convertida do formato &amp;quot;pasta sandbox&amp;quot; para o formato de &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;) isso permite que ela execute mais rápido, reduz o espaço em disco.&lt;br /&gt;
&lt;br /&gt;
O container pronto pode ser armazenado na sua pasta /home/nome_usuario da rede, assim pode ser executada como leitura de qualquer máquina de processamento que o usuário logar.&lt;br /&gt;
&lt;br /&gt;
1) Para converter do formato '''&amp;quot;pasta sandbox&amp;quot;''' para o formato '''&amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt;'''. [https://sylabs.io/guides/3.9/user-guide/build_a_container.html#converting-containers-from-one-format-to-another Dicas sobre conversão de formatos das máquinas container]:&lt;br /&gt;
    sudo singularity build [container_destino] [container_origem]&lt;br /&gt;
    sudo singularity build my_container-compact.sif my_container/&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Limitar recursos do container (RAM, Core's, network e etc) ==&lt;br /&gt;
&lt;br /&gt;
É possível criar um arquivo '''cgroups.toml''' e limitar (ou medir) recursos usados pelo container. Por exemplo, limitar o uso de RAM para não esgotar os recursos da máquina host. &lt;br /&gt;
&lt;br /&gt;
Segue o texto original e os links com mais informações:&lt;br /&gt;
&lt;br /&gt;
''The cgroups (control groups) functionality of the Linux kernel allows you to limit and meter the resources used by a process, or group of processes. Using cgroups you can limit memory and CPU usage. You can also rate limit block IO, network IO, and control access to device nodes.''&lt;br /&gt;
&lt;br /&gt;
* https://docs.sylabs.io/guides/3.10/admin-guide/configfiles.html#cgroups-toml&lt;br /&gt;
&lt;br /&gt;
* https://docs.sylabs.io/guides/3.10/admin-guide/configfiles.html&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Docker Hub: Usar repositório de Máquinas Container Prontas! ==&lt;br /&gt;
* Docker Hub: várias imagens prontas com ferramentas instaladas&lt;br /&gt;
&lt;br /&gt;
    https://hub.docker.com/&lt;br /&gt;
&lt;br /&gt;
Por exemplo pode-se buscar no google: &amp;quot;docker hub opencv ubuntu&amp;quot;, uma das respostas será o repositório &lt;br /&gt;
&lt;br /&gt;
    https://hub.docker.com/r/jjanzic/docker-python3-opencv&lt;br /&gt;
&lt;br /&gt;
Para usar um endereço de imagem docker hub e criar seu container singularity, usa-se o '''formato docker://REPOSITORIO:TAGS'''&lt;br /&gt;
&lt;br /&gt;
No caso do repósitório exemplo, ao abrir o link, vai encontrar diversas TAGS listadas na pagina: &lt;br /&gt;
&lt;br /&gt;
    List of available docker tags:&lt;br /&gt;
    opencv-4.1.0 (latest branch)&lt;br /&gt;
    contrib-opencv-4.1.0 (opencv_contrib branch)&lt;br /&gt;
    opencv-4.0.1&lt;br /&gt;
    contrib-opencv-4.0.1&lt;br /&gt;
    opencv-4.0.0&lt;br /&gt;
    contrib-opencv-4.0.0&lt;br /&gt;
    opencv-3.4.2&lt;br /&gt;
    contrib-opencv-3.4.2&lt;br /&gt;
    (...)&lt;br /&gt;
&lt;br /&gt;
Assim para criar o container usando &amp;lt;code&amp;gt;build&amp;lt;/code&amp;gt; e copiando do repositório exemplo a tag &amp;lt;code&amp;gt;opencv-4.0.1&amp;lt;/code&amp;gt;, tem-se:&lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox opencv-base docker://jjanzic/docker-python3-opencv:opencv-4.0.1&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PIP: Python Package Installer ==&lt;br /&gt;
O '''Python Package Installer''', também conhecido como PIP, é responsável por instalar os pacotes Python criados pela comunidade. Dentro do singularity + moosefs, ele tem um comportamento anômalo, não instalando nas pastas padrão. Tais pastas &amp;quot;''padrão''&amp;quot; são especificadas diretamente no código-fonte do python, mais precisamente no módulo ''sys''.&lt;br /&gt;
Faz-se portanto necessário utilizar a flag &amp;lt;code&amp;gt;-t/--target&amp;lt;/code&amp;gt; ao instalar os pacotes via pip, apontando para a pasta ''dist-packages'' da distribuição utilizada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; pip install &amp;lt;package&amp;gt; -t /usr/local/lib/python2.7/dist-packages/ &amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Links dos Comandos Básicos ==&lt;br /&gt;
https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#interact-with-images&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/build_a_container.html#build-a-container '''build''']&amp;lt;/code&amp;gt;: Cria uma imagem para a máquina container&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt; [https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#shell '''shell''']&amp;lt;/code&amp;gt;: Executa a imagem da máquina container e permite a interação no prompt do shell&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#executing-commands '''exec''']&amp;lt;/code&amp;gt;: Executa um comando na máquina container, em segundo plano, e apresenta o resultado no shell da máquina host&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;[https://www.sylabs.io/guides/3.9/user-guide/quick_start.html#running-a-container '''run''']&amp;lt;/code&amp;gt;: Executa ações e scripts configurados no container, como se fosse um executável.&lt;br /&gt;
&lt;br /&gt;
* opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/3.9/user-guide/quick_start.html#working-with-files '''--bind''']&amp;lt;/code&amp;gt;: Permite acessar pastas e arquivos (path) da máquina host dentro da máquina container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#user-defined-bind-points outras dicas sobre --bind])&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;'''build'''&amp;lt;/code&amp;gt;: Criar uma máquina container ==&lt;br /&gt;
&lt;br /&gt;
==== Criar uma máquina container editável (para instalar pacotes) ====&lt;br /&gt;
* Deve-se usar um singularity no formato &amp;quot;pasta sandbox&amp;quot; (estrutura de diretórios). [https://www.sylabs.io/guides/2.5.1/user-guide/quick_start.html#sandbox-directory Dicas sobre a opção &amp;lt;code&amp;gt;--sandbox&amp;lt;/code&amp;gt;].&lt;br /&gt;
* Criar singularity sandbox usando o repositório Ubuntu 18.04 do Docker Hub: &lt;br /&gt;
&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:20.04&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
* Exemplo singularity sandbox usando um repositório qualquer do dockerhub&lt;br /&gt;
    sudo singularity build --sandbox my_container/ docker://repository_name:tag&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== outros exemplos menos usados, pois criam container's não editável ====&lt;br /&gt;
* Criar uma máquina container em formato &amp;lt;code&amp;gt;.img&amp;lt;/code&amp;gt; (read-only) a partir de um repositório Docker Hub: &lt;br /&gt;
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
Deve-se usar o formato &amp;lt;code&amp;gt;.sif&amp;lt;/code&amp;gt; (writable) a partir de um repositório Docker Hub: &lt;br /&gt;
    sudo singularity build my_ubuntu.sif docker://index.docker.io/library/ubuntu:latest&lt;br /&gt;
&lt;br /&gt;
* Converter ou Criar uma máquina container em formato de imagem a partir de uma pasta sandbox:&lt;br /&gt;
    sudo singularity build my_ubuntu.sif my_container/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;'''shell'''&amp;lt;/code&amp;gt;: Executar a máquina container e interagir no shell: ==&lt;br /&gt;
&lt;br /&gt;
* Executar a máquina container no shell, sem salvar modificações feitas na sessão:&lt;br /&gt;
    singularity shell my_container/&lt;br /&gt;
    singularity shell my_ubuntu.sif/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;opção '''--writable'''&amp;lt;/code&amp;gt;: Permitir alterar o container em formato pasta sandbox: ==&lt;br /&gt;
&lt;br /&gt;
* Só é possivel alterar um container em formato &amp;lt;code&amp;gt;sandbox&amp;lt;/code&amp;gt;, uma boa prática é adicionar a opção --no-home é importante para não ocorrer a montagem automática da /home do root, e evitar que instaladores tentem usar essa pasta para instalação de pacotes.&lt;br /&gt;
    sudo singularity shell --writable --no-home my_container/&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;code&amp;gt;opção '''--bind'''&amp;lt;/code&amp;gt;:Montando pastas da máquina host para acessar dentro da máquina container ==&lt;br /&gt;
A pasta do home do usuário é montada automaticamente pelo singularity dentro da máquina container ([https://sylabs.io/guides/3.9/user-guide/bind_paths_and_mounts.html#system-defined-bind-paths algumas outras também ] ), mas se for necessário acessar outra pasta no disco da máquina host, deve-se usar a opção &amp;lt;code&amp;gt;[https://sylabs.io/guides/2.5/user-guide/bind_paths_and_mounts.html#specifying-bind-paths --bind]&amp;lt;/code&amp;gt; para indicar o caminho (path) a ser usado. O usuário precisa ter permissão de leitura e escrita na pasta da máquina host.&lt;br /&gt;
&lt;br /&gt;
* Executar a máquina container no shell e montar o caminho /homeLocal/fulano da máquina host dentro da máquina container &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;singularity shell --bind /homeLocal/fulano:/mnt my_container/&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Analucia</name></author>	</entry>

	</feed>