Raio-X parcial — seções 1 a 4. Prazo: sexta-feira, 25/09 às 23:59.
Raio-X · entrega parcial
Como fazer a parcial, do começo ao PDF
O enunciado diz o que o relatório precisa ter. Esta página mostra como fazer, passo a passo.
São três sessões de trabalho, de uns 50 minutos cada. Dá para fazer uma por dia. Se é a primeira vez que você escreve um relatório assim, siga na ordem: cada passo já vem com o comando pronto e com o que você deve olhar na tela.
Agora é só até a seção 4
A entrega parcial tem quatro seções: identificação do sistema, chamadas de sistema, virtualização e processos.
As seções 5, 6 e 7 são da entrega final. Não comece por elas.
Antes de começar
Quatro combinados com a equipe
Quinze minutos aqui evitam muito perrengue depois.
Só um da equipe tem VM funcionando. Tem problema?
Não. É assim mesmo: a VM é de um integrante só.
Os outros acompanham pela tela dele, do lado ou por compartilhamento de tela, e depois ficam com a parte escrita.
O que não pode é cada um rodar os comandos na sua própria máquina e juntar tudo. O relatório é o raio-x de uma máquina.
Passo 1 de 7
Guardar o que aparece na tela
Você vai rodar uns quinze comandos. Se for tirar foto da tela em cada um, dá trabalho e o arquivo final fica pesado demais.
Tem um jeito melhor: mandar o resultado de cada comando para um arquivo de texto. Depois, na hora de escrever, você escolhe o que entra no relatório.
mkdir -p ~/raio-x && cd ~/raio-xO que é
Cria uma pasta chamada raio-x e entra nela. O ~ é um atalho para a sua pasta pessoal.
Por que fazer
Tudo o que você guardar fica num lugar só, fácil de achar depois. Se precisar refazer alguma coisa, é só voltar para esta pasta.
uname -a 2>&1 | tee -a evidencias.txtO que é
Este comando parece estranho, mas são quatro pedaços simples:
uname -amostra a versão do sistema. É o comando de verdade.|pega o resultado e passa adiante, para outro comando. É o pipe do Encontro 6.tee -a evidencias.txtmostra o resultado na tela e grava no arquivo, ao mesmo tempo. O-aquer dizer acrescentar: grava no fim, sem apagar o que já estava lá.2>&1manda para o arquivo também as mensagens de erro.
Por que o 2>&1 importa
O sistema tem dois canais de saída: um para o resultado normal e outro para os erros. O arquivo só recebe o primeiro.
Sem o 2>&1, um comando que dá errado grava um arquivo vazio, e depois você não descobre o
motivo. Isso também é do Encontro 6.
$ uname -a 2>&1 | tee -a evidencias.txt Linux ubuntu-vm 6.8.0-45-generic #45-Ubuntu SMP x86_64 GNU/Linux
o resultado aparece na tela normalmente, igual a sempre. A diferença você não vê: ele também foi
escrito no arquivo. Confira rodando cat evidencias.txt.
É muita coisa para digitar toda vez
Depois do primeiro, aperte a seta para cima no teclado. O comando anterior volta, e você só troca a primeira parte.
echo "== lscpu ==" | tee -a evidencias.txtO que é
Escreve um título dentro do arquivo, antes de você rodar o próximo comando. Troque lscpu pelo
nome do comando da vez.
Por que fazer
Sem isso, o arquivo vira um monte de texto emendado e você não sabe onde um resultado termina e o outro começa. Com isso, ele já fica quase na ordem do relatório.
Escreva texto, não foto da tela
Sempre que der, copie o texto do terminal em vez de tirar foto da tela. Por três motivos:
- Texto continua legível quando alguém aumenta o zoom. Foto de terminal fica embaçada.
- O PDF pode ter no máximo 15 MB. Fotos enchem esse limite rápido. Texto quase não ocupa espaço.
- Com texto, você corta só o pedaço que interessa. A tela inteira atrapalha quem lê.
A exceção é o top, que é uma tela que fica se mexendo. Dele, tire foto mesmo. Se quiser em texto,
use top -b -n 1 | head -20.
Passo 2 de 7
Seção 1 — que máquina é essa
A pergunta desta seção é: que recursos o sistema controla, e quanto ele tem de cada um? Dito de outro jeito: que máquina é essa, e quanto ela tem de processador, memória e disco?
cat /etc/os-release · uname -a · hostname · whoamiO que capturar
Rode os quatro, um de cada vez, cada um com | tee -a evidencias.txt no fim:
cat /etc/os-release— qual Linux é, e qual versão.uname -a— a versão do kernel, que é o núcleo do sistema.hostname— o nome da máquina.whoami— com qual usuário você está.
O que olhar
A versão do Ubuntu e a versão do kernel são coisas diferentes, e muita gente confunde as duas. O Ubuntu é o sistema inteiro; o kernel é só o miolo dele.
Repare que o uname mostra também x86_64, que é o tipo do processador.
lscpu · free -h · df -hO que capturar
Os três, um por vez. Eles mostram justamente os três recursos que o sistema divide entre os programas: processador, memória e disco.
O que olhar
No lscpu: quantos núcleos a VM enxerga (devem ser 2) e o nome do processador — que é o
processador real da máquina do laboratório, não um inventado.
No free -h: a coluna available, que é o quanto ainda dá para usar.
No df -h: a linha do /, que é o disco principal, e o quanto dele já está ocupado.
números parecidos com o que foi configurado na Semana 0: 2 núcleos, uns 4 GB de memória e 25 GB de disco. Se der diferente, escreva isso no relatório. Achado diferente do esperado também vale.
Passo 3 de 7
Seção 2 — o que um programa pede ao sistema
A pergunta desta seção é: o que um programa simples precisa pedir ao sistema para funcionar?
Um programa não mexe direto no disco nem na tela. Ele pede para o sistema fazer isso. Cada
pedido desses tem um nome: chamada de sistema. O comando strace mostra esses pedidos acontecendo.
strace -c ls 2>&1 | tee -a evidencias.txtO que é
O strace fica espiando os pedidos que um programa faz ao sistema. O -c faz um resumo: em vez
de listar pedido por pedido, ele conta quantas vezes cada tipo aconteceu.
Aqui o 2>&1 é obrigatório
O strace escreve pelo canal de erro, não pelo canal normal. Sem o 2>&1, o arquivo fica vazio
e parece que o comando não funcionou.
Se acontecer com você, não é defeito: é só o 2>&1 faltando.
uma tabela com nomes como openat, mmap, write e close, cada um com um número do lado.
Um ls simples faz dezenas de pedidos ao sistema.
o mesmo strace -c em outro programaO que capturar
Rode o mesmo strace -c em outro programa e guarde as duas tabelas. Por exemplo date, ou
cat /etc/hostname.
Por que fazer
Comparar os dois é o que transforma a seção em análise. Sem comparação, ela só descreve.
Duas perguntas boas: qual dos dois pede mais coisas ao sistema? Quais pedidos aparecem nos dois, e por quê?
Passo 4 de 7
Seção 3 — o que é real e o que é virtual
A pergunta desta seção é: nesta máquina, o que é físico, o que é virtual e o que é só separado do resto?
systemd-detect-virt · hostnamectlO que capturar
systemd-detect-virt responde numa palavra só qual programa de virtualização está sendo usado.
hostnamectl mostra um resumo: sistema, kernel e tipo de máquina.
O que olhar
A resposta deve ser oracle, que é o VirtualBox.
Repare no que isso quer dizer: é a própria máquina virtual dizendo que sabe que é virtual. Dá um bom parágrafo sobre o VirtualBox, que é um programa rodando por cima do Windows do laboratório.
time docker run --rm alpine echo oiO que capturar
Guarde as três linhas que o time mostra no fim: real, user e sys. A que interessa é a
real, que é o tempo que passou de verdade.
Rode duas vezes e guarde as duas: a primeira baixa a imagem da internet, a segunda não.
Por que fazer
Aqui a diferença entre máquina virtual e container aparece em número, não em texto.
Compare esse tempo com o tempo que a sua VM leva para ligar. O container é rápido porque ele não liga sistema nenhum: ele usa o que já está ligado.
na segunda vez, menos de um segundo. Se aparecer erro de permissão, tente com sudo docker, ou
confira se o Docker está ligado com systemctl status docker.
A melhor evidência desta seção
Rode uname -r na sua VM. Depois rode docker run --rm alpine uname -r.
A versão é a mesma, mesmo o sistema de dentro sendo Alpine e o de fora sendo Ubuntu. Isso acontece porque o container não tem kernel próprio: ele usa o kernel da sua VM.
Guarde as duas saídas lado a lado. É a evidência mais forte desta seção, e costuma render uma boa pergunta na defesa.
Passo 5 de 7
Seção 4 — o que está rodando na máquina
A pergunta desta seção é: o que está rodando agora, e quem começou cada coisa?
Processo é um programa em execução. O mesmo programa aberto duas vezes são dois processos.
ps aux | wc -l · ps -ef --forestO que capturar
Primeiro a conta: ps aux | wc -l conta quantos processos existem. Faça isso com a VM recém
ligada e só um terminal aberto.
Depois a árvore: ps -ef --forest mostra quem começou quem.
Como cortar sem perder o sentido
A árvore tem centenas de linhas e não cabe no relatório.
Pegue só o pedaço onde aparece o seu bash e os processos acima dele, até chegar no primeiro de
todos. Escreva no texto que é um recorte.
cat /proc/$$/status | head -20O que é
O $$ é o número do terminal em que você está digitando. Ou seja: este comando faz o processo
olhar para ele mesmo.
O que olhar
Quatro linhas: Name, State, Pid e PPid.
O PPid é o processo que criou este aqui — o "pai" dele. E esse número também aparece na árvore
do comando anterior. Ligar as duas evidências uma na outra vale mais do que as duas soltas.
o mesmo processo, por dentro e por foraO que capturar
Suba um container que fica ligado um tempo:
docker run -d --name meuproc alpine sleep 300
Agora veja de fora, na sua VM: ps aux | grep sleep. Anote o número que aparecer.
E veja de dentro do container: docker exec meuproc ps aux.
O que olhar
É o mesmo processo, com dois números diferentes: um número alto na sua VM, e o número 1 dentro do container.
Não são dois processos. É um só, visto de dois lugares.
de dentro, uma lista bem curtinha: o container quase só enxerga ele mesmo. Quando terminar,
limpe com docker rm -f meuproc.
Passo 6 de 7
Escrever: o modelo de uma evidência
Evidência é a prova de que vocês fizeram: o comando, o que apareceu na tela e o que aquilo quer dizer.
Com o evidencias.txt pronto, escrever fica fácil. Toda evidência tem as mesmas quatro partes,
sempre nesta ordem. Copie o modelo abaixo para cada uma.
modelo — copie isto para cada evidência
[1] O QUE FIZEMOS Uma frase dizendo o que vocês queriam descobrir. [2] COMANDO E RESULTADO $ o comando exatamente como foi rodado o que apareceu na tela, só o pedaço que interessa [3] O QUE ISSO MOSTRA Duas ou três frases, com as palavras de vocês, apontando os números que aparecem ali em cima. [4] O CONCEITO O que explica o que vocês viram, dizendo de onde tiraram: (Tanenbaum, 2.1, p. 79) ou (Laureano, cap. 10, p. 145)
O modelo preenchido
Assim perde nota
"Rodamos o strace -c ls. Apareceram várias chamadas de sistema. Chamada de sistema é quando o
programa pede alguma coisa para o kernel."
O que falta: não tem o resultado da tela, não tem nenhum número, e não diz de onde veio a explicação. Dá para escrever isso sem ter rodado nada.
Assim ganha nota
"Queríamos saber o quanto um comando simples depende do sistema. O strace -c ls contou 58
chamadas de sistema para listar uma pasta com 4 arquivos, sendo 21 do tipo mmap e 9 do tipo
openat. Ou seja: mesmo um programa que parece não fazer nada precisa abrir bibliotecas, colocar
elas na memória e escrever na tela. Cada uma dessas ações é um pedido ao sistema, porque o
programa roda em modo usuário e não pode mexer no hardware direto (Tanenbaum, 1.6, p. 50)."
Um teste rápido antes de passar para a próxima
Leia o que você escreveu e pergunte: alguém conseguiria escrever isso sem ter rodado o comando?
Se a resposta for sim, está faltando alguma coisa. Quase sempre é um número do resultado, ou a frase que diz o que aquele número significa nesta máquina.
É aí que a nota se decide.
Passo 7 de 7
Montar o PDF e enviar
Como gerar o PDF
No Google Docs: Arquivo → Fazer download → PDF. No LibreOffice: Arquivo → Exportar como PDF.
Nos blocos de comando e de resultado, use uma fonte de largura fixa, como Courier ou Consolas. Isso ajuda quem lê a separar o que é texto de vocês do que é resposta da máquina.
Se o arquivo passar de 15 MB, o problema são as fotos de tela: troque por texto ou diminua o tamanho delas.
Antes de enviar
Confira do jeito que vai ser corrigido
A nota sai de três critérios, com estes pesos. Confira um por um: dá para ganhar ponto em dez minutos aqui.
Peso 4
As quatro seções
As seções 1, 2, 3 e 4 estão lá, e cada uma responde à pergunta dela? Seção que só tem o título conta como se não existisse.
Peso 3
As evidências
Cada coisa que vocês afirmam tem o comando e o resultado da VM de vocês? Resultado copiado de tutorial, de outra máquina ou inventado zera este critério.
Peso 3
A ligação com a teoria
Cada seção liga o que apareceu na tela a um conceito, dizendo de onde tirou? Dizer de onde tirou não é copiar o parágrafo do livro: é escrever com as palavras de vocês e apontar a página.
Erros que aparecem todo semestre
- Foto da tela inteira em vez do pedaço que interessa. Quem corrige não deveria ter que procurar.
- Resultado sem comando, ou comando sem resultado. Os dois sempre juntos.
- Conceito jogado no fim da seção, sem ligação com o número que apareceu.
- Citação sem página. Só "(Tanenbaum)" não conta.
- Capa sem matrícula, ou com matrícula errada. É por ela que a nota chega em cada um.
- Enviar e não conferir. Abra o PDF depois de enviar e veja se está tudo legível.
Confira antes de enviar
- Todos os comandos foram rodados na mesma VM, e ela está declarada na capa
- As seções 1, 2, 3 e 4 estão completas
- Cada seção responde à pergunta dela
- Toda afirmação tem comando e resultado
- Os resultados estão cortados no que interessa
- Cada seção liga a prática a um conceito
- As citações têm livro, capítulo e página
- A capa tem equipe, nomes, matrículas e o dono da VM
- O PDF abre e tem menos de 15 MB
- Todo mundo da equipe sabe explicar todas as seções
Enviar
O formulário fica no fim do enunciado, junto com o prazo. Um integrante envia pela equipe toda.
Dá para enviar de novo quantas vezes quiser até o prazo: vale o último envio. O recibo mostra um número de protocolo — guarde ele.