Mudanças entre as edições de "PJI-2016-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Criou página com 'Endereço encurtado: http://bit.ly/pji20161 __TOC__ = Projeto Integrador I: Diário de Aula 2016-1 = '''Professores:''' Marcelo Maia Sobral ([[imagem...')
 
Linha 359: Linha 359:
  
 
[[imagem:Pji1-projeto1-cm.jpg|800px]]
 
[[imagem:Pji1-projeto1-cm.jpg|800px]]
 
= 09/10: Projeto 1: escolhendo e instalando o ''media center'' =
 
 
Na aula anterior vocês procuraram por softwares que pudessem satisfazer as necessidades apontadas no projeto. Muitos softwares existem, dentre eles [http://kodi.tv Kodi], [http://www.getmiro.com Miro], [http://www.universalmediaserver.com/ Universal Media Server] e [http://plex.tv/ Plex] (devem existir ainda outros ...). Com base na tabela comparativa feita na aula passada, cada equipe deve '''escolher um deles''' para instalá-lo. Nosso objetivo é cada equipe ter um ''media center'' básico funcionando ao final da aula.
 
 
[[imagem:Xbmc_about.jpg]] [[imagem:Plex.png|400px]]
 
 
== Instalando o Kodi ==
 
 
# Execute o VirtualBox, e escolha a máquina virtual PJI1-grafico. Os próximos passos deverão ser realizados dentro dessa máquina virtual.
 
# Acesse o [http://kodi.tv/ site do Kodi].
 
# Esses sites sobre programas costumam ter uma página com instruções de instalação. Usualmente elas são acessadas pelo link '''Download'''. Procure esse link na página principal do site do Kodi, e siga-o. [[Image:Kodi-download.png|thumb|200px|Página de ''donwload'' do Kodi.]]
 
# Leia as instruções de instalação do Kodi no Ubuntu Linux, que é o sistema operacional que iremos usar.
 
# Siga as instruções, que evolve várias etapas, para que, ao final, se tenha o Kodi instalado.
 
 
Apesar do guia acima parecer curto e fácil, ele implica alguns conhecimentos para ser realizado a contento - e entendido ! Uma compreensão sobre o que é o sistema operacional Linux, quais seus elementos básicos, e como ele pode ser utilizado, são necessários para essa tarefa. Mas veremos isso à medida que instalarmos o Kodi.
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/videos Videos para testar o Kodi]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/imagens Fotos para testar o Kodi]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/musicas/ Musicas]
 
 
=== Caso a interface gráfica fique lenta ===
 
 
Uma interface gráfica lenta no VirtualBox significa que a aceleração gráfica não está ativada. Para ativá-la deve-se instalar ''''dentro da máquina virtual''' um software do VirtualBox chamado de ''Guest Additions''. Siga os passos abaixo para fazer essa instalação:
 
 
* [http://download.virtualbox.org/virtualbox/4.3.14/VBoxGuestAdditions_4.3.14.iso Os drivers do VirtualBox]
 
** Abra um navegador de arquivos
 
** Clique duas vezes no arquivo VBoxGuestAdditions_4.3.14.iso
 
** Veja que apareceu no canto esquerdo inferior uma pasta com nome VBoxGuest ... selecione-a no navegador de arquivos
 
** Copie o arquivo VBoxLinuxAdditions.run para a pasta pessoal do usuário (''home folder'')
 
** Em um terminal, execute: <syntaxhighlight lang=bash>
 
sudo apt-get install linux-headers-$(uname -r)
 
sudo apt-get install dkms
 
sudo bash VBoxLinuxAdditions.run
 
</syntaxhighlight>
 
** Após a instalação reinicie a máquina virtual
 
 
== Instalando o Plex ==
 
 
== O que é um sistema operacional ? ==
 
 
No curso iremos trabalhar com sistema operacional Linux. Porém o conceito de ''sistema operacional'' inclui também o [http://pt.wikipedia.org/wiki/Microsoft_Windows Windows], [http://pt.wikipedia.org/wiki/OS_X Mac OS X], [http://www.freebsd.org/ FreeBSD], [http://pt.wikipedia.org/wiki/Android Android], [http://pt.wikipedia.org/wiki/IOS iOS], e ([http://levenez.com/unix/ muitos], [http://levenez.com/windows/ muitos] !) outros. Para ter uma ideia do que faz um sistema operacional, vejam esta animação:
 
<center>{{#ev:youtube|4eAeTPA8jvE}}<br/>A Saga do Windows</center>
 
 
Não há um video tão direto e divertido como esse que se baseie no Linux. Mas alguns documentários podem contextualizar o Linux e contar um pouco de sua história. Vocês podem assisti-lo em outro momento, caso se interessem em conhecer  melhor o Linux e software livre:
 
<center>{{#ev:youtube|plMxWpXhqig}}<br/>Revolution OS: A História do Linux, GNU e software livre
 
{{#ev:youtube|hZcPedvLqTM}}<br/>The Code Linux - documentário sobre Linux</center>
 
 
 
O que esses videos procuram revelar é que o sistema operacional é um '''programa''' que articula os recursos do computador (''hardware'') para que usuários possam executar programas (''software''). O sistema operacional por si só não tem utilidade, pois ele existe para viabilizar o uso de aplicativos, e esses sim são úteis para os usuários. Costuma-se dizer também que um sistema operacional pode ser visto como uma ''plataforma de software'' sobre a qual podem-se criar e utilizar programas.
 
 
 
[[imagem:Pji-So1.png|600px]]
 
<br>''Um sistema computacional é formado por hardware e software, e é utilizado por pessoas ou mesmo outros sistemas''
 
 
 
Alguns conceitos são comuns ao projeto de sistemas operacionais:
 
* '''Interface com o usuário''', tanto gráfica quanto via [http://www.guiafoca.org/cgs/guia/iniciante/ch-bas.html#s-basico-terminal terminal] com o [http://www.guiafoca.org/cgs/guia/iniciante/ch-bas.html#s-basico-interpcmd interpretador de comandos (''shell'')]
 
* '''Processos''' (programas em execução), sendo usual hoje em dia que múltiplos processos possam coexistir em um sistema operacional
 
* '''Gerenciamento dos recursos''' do computador (memória, discos, ...), de forma a tirar melhor proveito de suas capacidades
 
* '''Arquivos e diretórios''', para facilitar o armazenamento de dados e sua organização
 
* '''Rede''' (comunicação com outros computadores), uma vez que hoje em dia é inconcebível que um dispositivo computacional não possa se comunicar com outros dispositivos
 
 
 
=== Sistemas operacionais usados em equipamentos de rede ===
 
 
Equipamentos de rede como roteadores, pontos de acesso, modems adsl, switches ethernet e mesmo centrais telefônicas podem ser considerados computadores especializados. Todos possuem algum sistema operacional sobre o qual outros softwares são usados para implementar as funções de cada equipamento.
 
 
* [http://www.makeuseof.com/tag/what-is-openwrt-and-why-should-i-use-it-for-my-router/ OpenWRT: Linux para roteadores e pontos de acesso]
 
* [http://unix.stackexchange.com/questions/128899/are-router-firmware-based-on-linux Firmwares para roteadores são baseados em Linux ?]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/icip_30.pdf Módulo ICIP 30 para Centrais Telefônicas Intelbras usam Linux ...]
 
 
=== Interface com o usuário ===
 
 
Hoje, em particular, precisaremos explorar um pouco dos conceitos de ''interface com o usuário'', ''processos'' e ''usuários''. Nosso ponto de partida é o uso do ''terminal'', pois precisaremos disso para iniciar a instalação do centro de midia.
 
 
[[imagem:Pji-Terminal1.png|600px]]
 
<br>''Um terminal com seu shell ...''
 
 
 
Em especial, ao longo dos projetos faremos uso intensivo da interface de linha de comando por meio de terminais (ver figura acima). Uma boa introdução ao uso do terminal pode ser lida no [[PJI-2015-2#Material_de_Apoio_2|material de apoio]].
 
 
== Algumas atividades para o uso do sistema operacional ==
 
 
Ao longo do projeto 1 (e também do projeto 2) diversas atividades precisarão ser realizadas com o sistema operacional. Algumas delas são bastante corriqueiras, e por isso acabam sendo realizadas desde as primeiras vezes em que se usa o sistema. Elas envolvem:
 
* '''Iniciar e encerrar uma sessão no Linux:''' sessões são iniciadas quando um usuário se autentica no sistema operacional, iniciando sua interface de trabalho (gráfica ou textual) e executando seus aplicativos. O término da sessão encerra todos os programas em execução iniciados pelo usuário (há exceções).
 
* '''Familizarização com a interface gráfica:''' a interface gráfica se apresenta como a interface preferencial para a grande maioria dos usuários. Ela oferece um acesso intuitivo para aplicativos e arquivos.
 
* '''Usar o navegador de arquivos Nautilus:''' o acesso a arquivos e diretórios (ou ''pastas'') pode ser feito com o navegador de arquivos. Esse aplicativo gráfico apresenta diversas facilidades para trabalhar com arquivos e diretórios.
 
* '''Operar sobre diretórios:''' o uso do sistema operacional e do seu ambiente de trabalho envolve também lidar com diretórios. Operações tipicas  incluem navegar, criar, remover, remover recursivamente, listar, copiar e renomear diretórios.
 
** ''Trabalhar o conceito de nomes de arquivos e diretórios absolutos e relativos:'' usando ".", "..", "~"  e "-"
 
** ''Trabalhar o conceito de diretório de trabalho e de diretório de entrada:''
 
* '''Operar sobre arquivos:''' arquivos são a forma usual de armazenamento persistente de informações no computador. Praticamente todos os dados acessados residem em arquivos, tais como textos, planilhas, videos, músicas, e outros. Assim, deve-se saber como criar, remover, renomear e listar arquivos.
 
* '''Usar o manual online (man):''' para ajudar o acesso à documentação do sistema operacional existem manuais online tanto em modo texto quanto gráfico. No modo texto, o comando [http://manpages.ubuntu.com/manpages/trusty/man1/man.1.html man] possibilita acesso a textos detalhados sobre inúmeros aspectos do sistema.
 
* '''Outros:''' trabalhar o conceito de arquivo escondido e usar TAB para autocompletar nomes no shell;
 
 
== Material de Apoio ==
 
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/slides/aula1.pdf Um resumo conceitual sobre sistemas computacionais]
 
* [http://www.guiafoca.org/ Guia Foca Linux]
 
* [https://help.ubuntu.com/12.04/ubuntu-help/index.html Guia oficial do Ubuntu Linux]
 
* [http://wiki.ubuntu-br.org/Terminal Uso do Terminal]
 
* [http://wiki.ubuntu-br.org/ComandosBasicos Comandos básicos na linha de comando]
 
* [https://linux.ime.usp.br/~lucasmmg/livecd/documentacao/documentos/terminal/Terminal_basico.html Terminal básico]
 
* [http://www.ibm.com/developerworks/br/linux/library/l-lpic1-v3-103-1/ Aprenda Linux, 101: A linha de comando do Linux (artigo da IBM ... um pouco mais avançado)]
 
 
= 15/10: Projeto 1: instalando fontes de midia locais =
 
 
Agora que o ''media center'' está instalado, devem ser adicionadas fontes de vídeos, música e imagens (fotos) para apresentação. O Kodi possiblita o acesso a essas fontes de diferentes maneiras, mas iniciaremos pela forma mais simples. Os arquivos de video, música e fotos devem ser colocados em ''subdiretórios'' no disco de seu computador (máquina virtual), e então cadastrados no Kodi. Porém primeiro é necessário entender como se trabalha com diretórios e arquivos no Linux.
 
 
== Arquivos e diretórios ==
 
 
'''Arquivos''' são como caixas, onde se guardam dados de um certo tipo. Arquivos podem conter programas, textos, imagens, videos, músicas, ou qualquer outro tipo de dado necessário aos usuários. E arquivos são um bom exemplo de algo que chega a parecer um objeto físico, mas na verdade é uma criação do sistema operacional. Quer dizer que não existem fisicamente arquivos - o que existem são discos rígidos, CD e DVD, pendrives, e possivelmente outros dispositivos de armazenamento. O sistema operacional apresenta cada arquivo como uma parte da capacidade desses dispositivos. Mas isso são detalhes internos do sistema operacional, e para os usuários interessa saber como usar esses arquivos.
 
 
Um '''arquivo''' se define como:
 
* um conteúdo, que são os dados nele armazenados
 
* informações sobre o arquivo, tais como ''nome'', ''usuário dono'', ''data de criação'', ''permissões de acesso'', entre outras.
 
* ações que pode ser feitas sobre ele: criar, remover, renomear, copiar, mover, mudar permissões, modificar conteúdo, mostrar conteúdo, ...
 
 
'''Nomes de arquivos e extensões'''
 
 
Nomes de arquivos, por convenção, são formados por duas partes: nome e extensão. No exemplo abaixo, o nome está destacado em azul e a extensão em vermelho:
 
 
<span style="color:blue;">mulher_de_40</span>.<span style="color:red;">mp3</span>
 
 
O conceito de extensão surgiu para informar o tipo de conteúdo do arquivo. No caso do Unix (incluindo o Linux), extensões são opcionais porém muito úteis. Elas ajudam os usuários a identificarem os tipos de arquivos (ex: se contêm música, video, texto, ou algum outro conteúdo). Muitos programas gráficos também usam as extensões para classificarem arquivos. Por isso, memso naõ sendo obrigatórias nos nomes de arquivos, é uma boa ideia usá-las sempre que possível.
 
 
Ao longo do tempo muitas extensões foram definidas, pois muitos tipos diferentes de arquivos foram inventados. Aproveitando o tema do projeto 1, uma relação não exaustiva de extensões para música e video é:
 
* '''Música (audio):''' mp3, wma, wav, aac, dat, ogg, m4a, flac, ami, au, mid, ac3
 
* '''Video:''' avi, mkv, mp4, mpg, vob, ogm, m4v, wmv, 3gp, flv, rmvb, mov, yuv, mjpg
 
 
Outras (muitas !) extensões podem ser encontradas em:
 
* [http://www.file-extensions.org/ Um catálogo de extensões de arquivos]
 
 
=== Procurando arquivos ou diretórios ===
 
 
Uma tarefa usual em um  sistema operacional é localizar arquivos. Essa procura pode ser baseada no nome ou parte do nome de arquivo, na data de criação ou última modificação, no nome do usuário ou grupo dono, ou outros atributos  do arquivo. Pode ser inclusive  baseada numa combinação dessas informações. Por exemplo,  pode ser necessário procurar todos os arquivos de música ou video, ou então todos os programas (arquivos executáveis) que pertençam ao superusuário (usuário ''root''). Existem programas capazes de fazer tais buscas tanto no ambiente gráfico quanto no modo texto.
 
 
As buscas a serem  realizadas são:
 
# Arquivos de música
 
# Arquivos de música ou video
 
# Arquivos de texto ou planilha do Openoffice que não tenham sido modificados a 7 dias ou mais
 
# Arquivos executáveis (programas)
 
# Arquivos executáveis pertencentes ao usuário ''root''
 
 
Para iniciar, vamos usar programas gráficos para fazer buscas.
 
 
==== Usando o ambiente gráfico ====
 
 
O primeiro programa gráfico a ser usado é o ''nautilus'', o gerenciador de arquivos disponível no Ubuntu Linux. Para usá-lo para fazer buscas selecione a opção de pesquisa:
 
 
 
[[imagem:Pesquisa1.png|600px]]
 
 
 
No ''nautilus'' aparecerá uma caixa de texto  onde se  deve digitar o nome ou parte do nome dos arquivos a serem procurados.
 
 
 
[[imagem:Pesquisa2.png|600px]]
 
 
 
Tente fazer as buscas usando esse programa. Há alguma que não pode ser feita ?
 
 
==== Usando a linha de comando (modo texto) ====
 
 
O ''nautilus'' funciona como um gerenciador de arquivos e diretórios, possibilitando investigar que arquivos existem em cada diretório, entre outras coisas. Com ele é simples listar o conteúdo de um ou mais diretórios, bastando navegar por sua interface. Mas na linha de comando não há essa facilidade. Nela devem-se usar alguns programas para obter um resultado parecido. Para começar a usar a linha de comando, devem-se conhecer e saber usar programas para navegar por diretórios, listar diretórios, procurar arquivos e diretórios e copiar arquivos.
 
 
 
===== Operações básicas: navegando por diretórios, listando diretórios, copiando e movendo arquivos =====
 
 
Na linha de comando existe o conceito de diretório atual ou corrente. Quando se acessa esse tipo de interface, existe um diretório em que operações sobre arquivos são realizadas. Para descobrir o diretório atual usa-se o programa [http://manpages.ubuntu.com/manpages/trusty/man1/pwd.1.html pwd], como mostrado a seguir:
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ pwd
 
/home/msobral
 
</syntaxhighlight>
 
 
 
No exemplo acima, o diretório atual é ''/home/msobral''. Qualquer operação sobre arquivos ou diretórios será feita tendo como base esse diretório. A operação mais simples é a listagem de diretório, que se faz com o programa [http://manpages.ubuntu.com/manpages/trusty/man1/ls.1.html ls]. Aproveitando o exemplo acima, a listagem do diretório atual teria este resultado:
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ ls
 
001.jpg                iperf-2.0.5.tar.gz            prova4-2011-1.odt
 
002.jpg                juliano.tgz                    prova4-2011-1-rec.odt
 
003.jpg                klaus                          prr.log
 
004.jpg                livros                        public_html
 
005.jpg                Makefile.in                    quartus.cap
 
006.jpg                nhrp.tar                      radiusd_test.py
 
007.jpg                nohup.out                      rco2
 
008.jpg                passwd.web                    rmu
 
msobral@turing:~$
 
</syntaxhighlight>
 
 
 
A listagem apresentada revela vários arquivos e subdiretórios existentes no diretório atual. Sabendo que ''public_html'' é um subdiretório, pode-se desejar mudar o diretório atual de forma a entrar nesse subdiretório. Isso pode ser facilmente realizado com o programa [http://manpages.ubuntu.com/manpages/vivid/en/man1/cd.1posix.html cd]:
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ cd public_html
 
msobral@turing:~/public_html$ pwd
 
/home/msobral/public_html
 
</syntaxhighlight>
 
 
 
Para voltar ao diretório imediatamente anterior ao diretório atual (''subir'' um diretório), deve-se usar o nome especial de diretório ''..'' (dois pontos):
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~/public_html$ cd ..
 
msobral@turing:~$ pwd
 
/home/msobral
 
</syntaxhighlight>
 
 
 
A cópia de arquivos na linha de comando envolve usar o programa [http://manpages.ubuntu.com/manpages/trusty/man1/cp.1.html cp]. Com ele podem-se copiar um ou mais arquivos para um diretório de destino. Por exemplo, para copiar o arquivo ''001.jpg'' para dentro do diretório ''public_html'' pode-se fazer o seguinte:
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ cp 001.jpg public_html
 
</syntaxhighlight>
 
 
O diretório de destino é sempre o último argumento passado ao programa ''cp''. A cópia de múltiplos arquivos pode ser feita listando-os todos antes do diretório de destino:
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ cp 001.jpg 002.jpg 003.jpg public_html
 
</syntaxhighlight>
 
 
 
... ou usando-se o caractere especial ''*'' (chamado de ''curinga'' ou ''wildcard'' no original em inglês):
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ cp *.jpg public_html
 
</syntaxhighlight>
 
 
 
No exemplo acima, todos os arquivos cujos nomes terminem com ''.jpg'' serão copiados para dentro de ''public_html''. Outra variação no uso do ''curinga'' é:
 
 
<syntaxhighlight lang=bash>
 
msobral@turing:~$ cp 00*.jpg public_html
 
</syntaxhighlight>
 
 
... em que todos os arquivos cujos nomes iniciem com ''00'' e terminem com ''.jpg'' serão copiados.
 
===== Procurando arquivos =====
 
 
A procura de arquivos e diretórios pode ser realizada na linha de comando com o programa '''find'''. Por exemplo, para localizar todos os arquivos ou diretórios chamados ''default'', e que estejam abaixo de ''/etc'':
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ find /etc -name default -print
 
/etc/default
 
/etc/calendar/default
 
/etc/X11/xinit/xinput.d/default
 
aluno@D1:~$
 
</syntaxhighlight>
 
 
 
Uso do '''find''' :
 
 
<syntaxhighlight lang=bash>
 
find diretório [opões]
 
</syntaxhighlight>
 
 
 
... sendo ''diretório'' o diretório abaixo de que se deseja fazer a busca. As opções servem para selecionar arquivos e diretórios durante a busca, e também para executar ações para cada um deles que for encontrado. Algumas opções mais comuns:
 
 
* '''-name nome:''' seleciona arquivos ou diretórios cujos nomes sejam '''''nome'''' . Essa opção aceita ''wildcards'' (* e ?)
 
* '''-type tipo:''' seleciona apenas o '''''tipo'''' indicado, que pode ser:
 
** '''d:''' diretório
 
** '''f:''' arquivo
 
** '''l:''' ''link'' simbólico (ou atalho)
 
* '''-perm modo:''' seleciona apenas arquivos ou diretórios que possuam as permissões indicadas em ''modo''
 
* '''-size tamanho:''' seleciona apenas arquivos com tamanho de acordo com o especificado (em bytes)
 
* '''-mtime n:''' seleciona apenas arquivos ou diretórios modificados a '''''n * 24''''' horas atrás
 
* '''-atime n:''' seleciona apenas arquivos ou diretórios acessados a '''''n * 24''''' horas atrás
 
* '''-user usuario:''' seleciona apenas arquivos ou diretórios pertencentes a '''''usuario'''''
 
* '''-exec comando \;:''' executa '''comando''' para cada arquivo ou diretório encontrado. Ex:
 
** ''find /tmp -type f -mtime +7 -exec rm -f {} \;'' : remove todos os arquivos dentro de /tmp que estejam há 7 dias sem serem modificados. A sequência '''''{}''''' é substituída pelo nome do arquivo encontrado.
 
 
... e muitas outras (consulte o [http://manpages.ubuntu.com/manpages/karmic/en/man1/find.1.html manual do find]).
 
 
=== Visualizando o conteúdo dos arquivos ===
 
 
Cada arquivo guarda um certo tipo de informação. Para poder visualizá-lo corretamente, deve-se usar um programa capaz de entender seu conteúdo, e mostrá-lo da forma esperada. Por exemplo, arquivos de video, música e imagem são reproduzidos pelo Kodi e outros programas. Arquivos de texto são visualizados e editados com editores de texto, e assim por diante. De forma geral, (quase) sempre existe ao menos um programa que sabe mostrar o conteúdo de um certo tipo de arquivo. Por convenção, o tipo de um arquivo é informado por sua extensão, que é a parte final do seu nome que vem após o '''.''' (ex: ''video.avi'' tem extensão ''.avi'').
 
 
 
Como exercício, procure programas capazes de mostrar estes tipos de arquivos:
 
* Videos com extensão .mp4, .avi, .mkv e .wmv
 
* Músicas com extensão .mp3, .wav, .flac, .ogg e .wma
 
* Imagens com extensão .png, .jpg, .gif, .bmp e .pnm
 
* Textos com extensão .txt, .rtf, .doc, .docx e .odt
 
* Arquivos com extensão .dia, .ods, .php, .html, .xml
 
 
Os programas encontrados devem poder ser usados tanto no modo gráfico quanto em linha de comando (se possível).
 
 
 
Mas, afinal, o que existe dentro dos arquivos ? Em que medida um arquivo de video, música, ou texto diferem em seus conteúdos ? Posto de outra forma, se não houvesse a extensão para informar o tipo de arquivo, seria possível identificá-los observando seus conteúdos ? Afinal, que conteúdo é esse ?
 
 
== Atividade ==
 
 
Crie três fontes locais de midia no Kodi: uma para '''videos''', outra para '''musicas''' e uma terceira para '''imagens'''. Em seguida copie arquivos de midia para seu computador e organize-os para que possam ser acessados por meio do Kodi. Caso não tenha em mãos esses arquivos de midia, use o seguinte:
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/videos Alguns videos]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/musicas Algumas músicas]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/imagens Algumas imagens]
 
 
 
Além disso, procure por arquivos de video e de música em seu computador, e copie-os para as respectivas fontes de midia do Kodi.
 
 
=== Permissões de acesso a arquivos e diretórios ===
 
 
As permissões de acesso a arquivos e diretórios permitem proteger o sistema de arquivos do Linux do acesso indevido por pessoas ou programas não autorizados.O princípio da segurança está baseado no conceito de '''usuário dono''' ou '''proprietário''', ''grupo'' e ''demais usuários''. Um arquivo sempre possui um usuário que é o seu ''proprietário''. Quando um usuário cria um arquivo ou diretório, ele passa a ser o seu dono. No entanto, o arquivo poderá ser repassado a outro usuário. O ''grupo'' permite atribuir permissões de acesso a arquivos e diretórios comuns a um ''grupo de usuários''. Por fim, ''demais usuários (outros)'' são usuários que não são donos nem pertencem ao grupo do arquivo ou diretório.
 
 
<syntaxhighlight lang=text>
 
Lembrar que um usuário do sistema é identificado pelo seu nome de login, ao qual existe associado
 
um número chamado UID (''user ID''). Uma coleção de usuários pode pertencer a um grupo. Um grupo
 
também possui um nome e um identificador numérico (''GID'').
 
</syntaxhighlight>
 
 
As permissões podem ser do tipo:
 
* '''leitura (''r'')''': permite o acesso ao conteúdo de arquivos; no caso de diretório, permite listar seu conteúdo.
 
* '''escrita (''w'')''': permite alterar o conteúdo do arquivo; no caso de diretório, permite criar arquivos ou subdiretórios dentro dele
 
* '''execução (''x'')''': permite executar um arquivo (caso seja um programa); no caso de diretório, permite entrar nele.
 
 
 
O acesso a um arquivo/diretório se dá da seguinte forma:
 
# Se o usuário que tentou o acesso for seu dono: verificam-se as permissões correspondentes ao proprietário do arquivo.
 
# Se o usuário pertence ao grupo dono do arquivo: verificam-se as permissões correspondentes a esse grupo
 
# Demais usuários: verificam as permissões para demais usuários (outros)
 
 
 
[[imagem:Pji-Permissoes2.png]]
 
<br>Um arquivo e suas permissões
 
 
== ATENÇÃO: teste de 22/10 ==
 
 
A primeira avaliação do tipo '''teste''' será realizada dia 22/10 às 19h. Ele será composto de algumas questões objetivas ou discursivas sobre os conceitos vistos até então:
 
* O sistema operacional Linux
 
* Arquivos e diretórios
 
 
As questões do teste serão feitas de acordo com as atividades realizadas em aula, e o material didático existente aqui na wiki, nas aulas de [[PJI-2015-2#09.2F10:_Projeto_1:_escolhendo_e_instalando_o_media_center|09/10]] e [[PJI-2015-2#15.2F10:_Projeto_1:_instalando_fontes_de_midia_locais|15/10]].
 
 
= 16/10: Projeto 1: transmitindo a midia pela rede=
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/ElogioOcio.pdf Elogio ao ócio: sobre trabalho, ócio, e as belas coisas inúteis]
 
 
 
Na aula passada foi visto como cadastrar fontes de midia locais. Essas fontes são na verdade diretórios existentes nos discos do computador onde roda o próprio Kodi. Os arquivos de midia nesses diretórios podem assim ser facilmente reproduzidos pelo ''media center''. O Kodi também é capaz de acessar arquivos de midia em fontes remotas - i.e. que são fornecidas por outros computadores através da rede. Por exemplo, inclua a seguinte fonte de video em seu Kodi, chamando-a de ''tele'' (seu caminho deve ser exatamente a URL mostrada abaixo):
 
* http://tele.sj.ifsc.edu.br/~msobral/pji/videos
 
 
A câmera IP mostrada em aula está nesta URL:
 
* rtsp://admin:admin@192.168.1.108:554/
 
 
Em seguida, acesse o menu de videos do Kodi e veja os videos existentes em ''tele''. Tente reproduzir um deles ...
 
 
== Atividade ==
 
 
Investigue as outras formas de cadastrar fontes de midia remotas disponíveis no Kodi. Para cada uma delas, procure entender como funciona, e qual o método de acesso utilizado.
 
 
== Compartilhando videos entre Kodi ==
 
 
* [http://www.techhive.com/article/2020825/how-to-get-started-with-dlna.html DLNA/Upnp ... a tecnologia usada para compartilhar videos e música no Kodi]
 
 
 
[[imagem:Pji1-Dlna.jpg]]
 
 
 
A atividade anterior mostrou como o Kodi pode obter midia que está armazenada em outros computadores. Mas ele pode também fornecer midia para outros dispositivos. Por exemplo, um computador com Kodi pode acessar as fontes de video e música de outro computador também com Kodi. Investigue como isso pode ser realizado, e demonstre com o acesso a midias que estão no computador de um colega.
 
 
'''Desafios:'''
 
* veja videos do Kodi em seu smartphone ou tablet.
 
* escute música do Kodi em seu smartphone ou tablet.
 
* toque músicas do seu smartphone ou tablet no Kodi
 
* restrinja o acesso ao seu centro de midia !
 
 
Para conseguir ativar essas funcionalidades no seu ''media center'', são necessários alguns conceitos básicos sobre comunicação de dados e redes de computadores. Não custa revisá-los ...
 
 
=== Comunicação de dados ===
 
 
Comunicação de dados pode ser entendida como '''troca de informação entre dois dispositivos através de algum meio de comunicação'''. A comunicação ocorre no âmbito de um sistema de telecomunicações, composto por equipamentos (''hardware'') e programas (''software''). Um sistema básico de comunicação de dados se constitui de cinco componentes:
 
 
[[imagem:Rede-intro-1.png]]
 
 
# '''A mensagem''': a informação a ser transmitida. O conteúdo da mensagem, seja um texto, música, video, ou qualquer outro tipo de informação, é representada por conjuntos de [http://pt.wikipedia.org/wiki/Bit '''bits''' (dígitos binários)].
 
# '''Transmissor:''' dispositivo que transmite a mensagem.
 
# '''Receptor:''' dispositivo que recebe a mensagem.
 
# '''Meio de comunicação:''' caminho físico por onde viaja a mensagem do transmissor até o receptor.
 
# '''Protocolo:''' conjunto de regras que governa a comunicação de dados.
 
 
 
Esse modelo pode ser usado para entender diferentes sistemas de comunicação, inclusive aqueles que envolvem computadores. Quando aplicado em uma escala maior (muitos computadores se comunicando), cria-se o que conhecemos como ''rede de computadores''. Hoje em dia, falar de ''rede de computadores'' é praticamente o mesmo que se referir a ''Internet'', mas nem sempre foi assim. Veja o video abaixo para ter uma ideia de como a ''Internet'' surgiu:
 
 
 
<center>{{#ev:youtube|yyY_392Tn7Q}}<br/>A história da Internet, que não é a [http://www.commoncraft.com/video/world-wide-web-explicada-pela-common-craft World Wide Web].</center>
 
 
= 22/10: Projeto 1: ajustes finos no centro de midia =
 
 
O Kodi pode ser em larga medida configurado e ajustado diretamente por meio de sua interface gráfica. Porém é interessante notar que alguns ajustes rápidos podem ser feitos diretamente em seus arquivos de configuração. Esses arquivos são compostos por texto simples, e se encontram dentro do subdiretório ''.kodi''. Sendo assim, hoje devemos realizar o seguinte:
 
# Explorar os ajustes que podem ser feitos no Kodi, incluindo acrescentar novas fontes de midia e ''add-ons''.
 
# Experimentar a edição de seus arquivos de configuração
 
 
A segunda atividade envolve o uso de um editor de texto, seja em modo gráfico ou em modo texto.
 
 
== Editores de texto ==
 
 
Os editores a serem vistos servem pra criar e modificar arquivos de texto simples (contêm apenas texto e sem formatação). Esse tipo de arquivo é muito comum para arquivos de programa, manuais rápidos, e documentos escritos em linguagens de formatação de texto, como HTML e XML.
 
 
Alguns desses editores:
 
 
* [http://library.gnome.org/users/gedit/stable/index.html.pt_BR gedit]: um editor de texto simples para o ambiente gráfico. Possui recurso para ressaltar palavras e sentenças, chamado ''syntax highlight'', de acordo com o tipo de texto (se programa em linguagem C, C++, Python, PHP, shll script, ou um texto HTML, entre outros).
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/vi.1posix.html vi]: um editor de programas com recursos avançados de edição. Mas usa uma interface textual com comandos que devem ser memorizados ... algo anacrônico, mas funciona. Como motivação para usá-lo, praticamente todo computador com Unix (não somente Linux) vem com esse editor previamente instalado.
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/nano.1.html nano]: um outro editor mais simples, também para modo texto e com menos funcionalidades que o '''vi''', porém um pouco mais amigável.
 
 
=== gedit ===
 
 
Para executar o ''gedit'' deve-se selecioná-lo no menu de aplicativos ou na ferramenta de busca da interface gráfica.
 
 
 
Esse editor é bastante simples, porém útil para a edição de perquenos textos e programas. Algumas funções existentes são busca e substituição de palavras e impressão. Outras funcionalidades podem ser adicionadas por ''plugins''.
 
 
[[imagem:Gedit2.png|600px]]
 
 
Experimente editar diferentes tipos de arquivos de texto com o ''gedit'':
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/portugol.html Um texto HTML]
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/exemplos/soma.c Um programa em linguagem C]
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/exemplos/Soma.java Um programa em linguagem Java]
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/exemplos/soma.py Um programa em linguagem Python]
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/roteiros/lab6/Leiame.txt Um texto simples]
 
 
=== nano ===
 
 
O editor ''nano'' serve para editar arquivos em modo texto. Sua tela apresenta uma área de trabalho, onde aparece o texto, com uma barra de ajuda embaixo. Nessa barra há os comandos que podem ser usados, que devem ser invocados com a combinação da tecla ''Ctrl'' e a letra indicada. Para terminá-lo basta teclar ''Ctrl X'', fornecendo o nome do arquivo onde guardar o texto.
 
 
[[imagem:Nano.png|600px]]
 
 
 
=== vi ===
 
 
O editor vi é bastante simples e muito utilizado por ser encontrado em todas as distribuições Linux. Poderíamos optar por um editor um pouco mais avançado, mas com o inconveniente de encontrarmos uma distribuição/instalação onde não dispuséssemos deste editor. O editor vi não tem como objetivo formatar textos: negritos, indentações, justificação, etc. Na prática o vi é muito usado para editar textos que não necessitam de formatação em nenhum momento, como por exemplo códigos fonte de programas em alguma linguagem de programação, e que não carreguem o texto com caracteres especiais. Assim, esse editor também é chamado de ''editor de programas''.
 
 
''Dicas:''
 
* [http://aurelio.net/vim/ Guia do vim]
 
** [http://aurelio.net/vim/vi-teclado.png Um guia de referência]
 
 
==== Modos de operação ====
 
 
O editor vi tem três modos  de operação distintos: modo insert ,
 
modo escape  (também chamado de modo comando), modo last line;
 
 
* '''insert:''' usado para a digitação do texto. Neste modo o vi funciona como uma máquina de escrever, com a diferença de que você pode retroceder sobre o texto já digitado para corrigir eventuais erros. Cada caracter que for digitado aparecerá na tela exatamente como foi digitado.
 
* '''escape:'''  os  caracteres  comuns  (letras,  números  e  sinais  de pontuação) têm um significado especial e quase todos os caracteres funcionam como comandos; portanto, existem muitos comandos. Alguns comandos servem para passar para o ''modo insert'', outros para movimentar o cursor sobre as linhas do texto, alterar trechos do texto, buscar palavras, etc.
 
* '''last  line:'''  os  comandos são digitados em  uma  linha  especial  que aparece no final da tela quando se digita ''':''' (dois pontos) no ''modo escape''. Parte dos comandos do ''modo escape'' possuem similares no ''modo last line'', como por exemplo os comandos  de edição, que veremos mais adiante. Os comandos no ''modo last line'' devem ser seguidos por ENTER, contrariamente ao que acontece no modo escape.
 
 
==== Criação e edição de arquivos ====
 
 
[http://dmitry.eti.br/vim Outro guia rápido sobre vi]
 
 
Para criarmos um arquivo simplesmente digitamos vi seguido do nome do arquivo. Por exemplo:
 
 
<syntaxhighlight lang=bash>vi primeiro.arquivo</syntaxhighlight>
 
 
Após isto será aberto o editor com conteúdo vazio, no modo comando. Para podermos editar qualquer coisa devemos entrar no modo inserção, para isto basta teclarmos <nowiki><i></nowiki> (aparecerá -- INSERT -- na base da janela). Em seguida digitamos o texto propriamente dito, usando o teclado normalmente.
 
 
Para salvarmos o texto devemos teclar <Esc> (modo comando), <:> (modo last line> e <w> (write). Assim teremos o nosso texto salvo.
 
 
Agora vamos a alguns comandos úteis:
 
 
* '''Copiar algumas linhas do texto:''' colocamos o cursor no início do texto a ser copiado e, no modo de comando, teclamos <n>+<y>+<y>, onde n é número de linhas que desejamos copiar. Por exemplo se digitarmos <5>+<y>+<y> copiaremos 5 linhas para o buffer.
 
* '''Excluir algumas linhas do texto:''' colocamos o cursor no início do texto a ser excuído e, no modo de comando, teclamos <n>+<d>+<d>, onde n é número de linhas que desejamos copiar. Por exemplo se digitarmos <3>+<y>+<y> apagaremos 3 linhas do texto mas que serão armazenadas no buffer.
 
* '''Colar o conteúdo do buffer para alguma parte do texto:''' colocamos o cursor no ponto onde pretendemos inserir o texto e,  no modo de comando,  teclamos <p> (paste) para inserirmos o texto abaixo da linha do cursor e <P> para inserir o texto acima da linha do cursor.
 
* '''Encontrar alguma palavra:''' no modo de comando, teclamos </> <palavra> <Enter>. O vi mostrará a primeira ocorrência da mesma. Para ir para a próxima ocorrência teclamos <n> (next), e para a ocorrência anterior teclamos <nowiki><p></nowiki> (previous)
 
* '''Substituir uma palavra por outra:''' no modo de comando, teclamos <:s/><palavra></><outra><Enter>. Por exemplo se quisermos substituir velha por nova: <:s/><velha></><nova><Enter>, assim teremos a troca da primeira ocorrência de velha por nova. Para substituirmos todas as ocorrências acrescentamos <%> entre <:> e <nowiki><s></nowiki> do caso anterior. Exemplo: <:%s/><velha></><nova><Enter>
 
* '''Inserir o conteúdo de um texto externo em nosso texto:''' no modo de comando, teclamos <:r>+<caminho/arquivo>+<Enter>.
 
* '''Salvar com outro nome:''' no modo de comando, teclamos <:w>+<novo.nome>+<Enter>.
 
 
 
Uma lista de comandos resumida segue abaixo:
 
 
* '''0''': vai para o início da linha
 
* '''$''': vai para o final da linha
 
* '''gg''': vai para a primeira linha
 
* '''G''': vai para a última linha
 
* ''':n''': vai para a linha n (n é um número)
 
* '''w''': vai para a próxima palavra
 
* '''b''': vai para a palavra anterior
 
* '''x''': apaga um caractere à direita do cursor
 
* '''X''': apaga um caractere à esquerda do cursor
 
* '''dd''': apaga-se uma linha inteira
 
* '''D''': apaga do cursor até o final da linha
 
* '''dw''': apaga até a próxima palavra
 
* '''dfs''': apaga até a próxima ocorrência do caractere s
 
* '''a''': entra-se em inserção uma posição à frente do cursor
 
* '''i''': entra-se em inserção uma posição antes do cursor
 
* '''rc''': substitui o caractere sob o cursor pelo caractere c
 
* '''cwnova''': substitui a palavra a partir do cursor pela palavra nova
 
* ''':w''': grava o arquivo
 
* ''':w um_arquivo''': grava o conteúdo no arquivo um_arquivo
 
* ''':w! um_arquivo''': grava o conteúdo no arquivo um_arquivo, sobrescrevendo-o caso exista
 
* ''':r um_arquivo''': lê um_arquivo e insere seu conteúdo a partir do cursor
 
* ''':r!comando''': executa comando no shell, e insere seu resultado a partir do cursor
 
* ''':q''': sai do vi (termina o editor)
 
* ''':q!''': sai do vi, descartando as modificações
 
 
=== Outros editores ? ===
 
 
Há muitos outros editores de texto ! Se tiver curiosidade, faça um pesquisa na Web sobre os editores de texto que existem para o Linux.
 
 
= 23/10: Projeto 1: continuação =
 
 
Hoje continuaremos a experimentar editores de texto no Linux, com ênfase em editores usados em linha de comando ([http://manpages.ubuntu.com/manpages/karmic/en/man1/nano.1.html nano] e [http://manpages.ubuntu.com/manpages/karmic/en/man1/vi.1posix.html vi] ou [http://manpages.ubuntu.com/manpages/trusty/en/man1/vim.1.html vim]). Além disso, veremos com obter informações sobre programas e outros assuntos no Linux (sem precisar usar a rede). Por fim, aprenderemos a realizar backups simples em sistemas Unix.
 
 
== O manual online do Linux ==
 
 
Todo sistema operacional da família Unix possui um manual online acessível pela linha de comando. Esse manual contém documentação sobre programas, comandos, bibliotecas de programação, arquivos de sistema e outros assuntos. Ele é acessível pelo comando [http://manpages.ubuntu.com/manpages/trusty/man1/man.1.html man]. Ele deve ser executado da seguinte forma:
 
 
<syntaxhighlight lang=bash>
 
man o_que_se_deseja_consultar
 
</syntaxhighlight>
 
 
Por exemplo, para saber o manual do comando ''cd'', pode-se fazer isto:
 
 
<syntaxhighlight lang=bash>
 
man cd
 
</syntaxhighlight>
 
 
 
Deve-se notar que o manual apresentado está em inglês. Isso serve como motivação para se acostumar a ler nesse idioma (muito importante para um técnico !). Mas existem manuais traduzidos para português, ainda que incompletos.
 
 
=== Atividade ===
 
 
# Descubra como instalar o manual em português. ''Dica:'' pesquise na web por ''man pages português''.
 
# Experimente visualizar o manual de outros comandos que você conhece (ex: ls, pwd, cp, mv, ...).
 
 
== Fazendo backup de seus arquivos ==
 
 
Existem muitos programas para realizar cópias de segurança no Linux (chamadas de ''backup''). Porém tradicionalmente a forma mais simples de realizar uma cópia pessoal de um conjunto de arquivos e diretórios faz uso de um programa simples chamado ''tar''.
 
 
=== tar ===
 
 
O programa ''tar'' é um  utilitário do mundo Unix originalmente criado para backups em fita (daí seu nome: ''TApe aRchiver'', se bem que ''tar'' é também um trocadilho que pode significar piche, pois ele de certa forma gruda um arquivo ao outro). O resultado da execução do ''tar'' é um arquivo contendo todos os arquivos e diretórios que foram selecionados para inclusão. Esse arquivo ''tar'' pode ser então compactado, obtendo-se algo parecido com o que faz zip ou rar.
 
 
Mas porque não usar então zip e rar ? Afinal, eles existem também no Linux ... No entanto, esses compactadores nasceram no mundo do antigo MS-DOS, e assim não são capazes de armazenar todos os atributos de arquivos que existem em sistemas Unix (informações tais como usuário e grupo dono do arquivo, permissões de acesso, tipo do arquivo, datas de último acesso e modificação). O ''tar'', pelo contrário, consegue preservar esses atributos, e por isto se torna mais adequado para uso no Unix em geral.
 
 
Uso do ''tar'':
 
* '''Criação de arquivo tar:''' <syntaxhighlight lang=bash>tar cf nome_arquivo.tar arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]</syntaxhighlight>
 
* '''Mostrar o conteúdo de arquivo tar:''' <syntaxhighlight lang=bash>tar tvf nome_arquivo.tar </syntaxhighlight>
 
* '''Extrair conteúdo de arquivo tar:''' <syntaxhighlight lang=bash>tar xf nome_arquivo.tar</syntaxhighlight>
 
 
Os usos acima não compactam os arquivos incluídos dentro do arquivo ''tar''. Para compactá-los deve-se adicionar uma opção de compactação:
 
* '''Criação de arquivo tar compactado:'''
 
** '''''Com compress:''''' <syntaxhighlight lang=bash>tar cZf nome_arquivo.tar.Z arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]</syntaxhighlight>
 
** '''''Com gzip:''''' <syntaxhighlight lang=bash>tar czf nome_arquivo.tar.gz arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]</syntaxhighlight>
 
** '''''Com bzip2:''''' <syntaxhighlight lang=bash>tar cjf nome_arquivo.tar.bz2 arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]</syntaxhighlight>
 
* '''Mostrar o conteúdo de arquivo tar:'''
 
** '''''Com compress:''''' <syntaxhighlight lang=bash>tar tvZf nome_arquivo.tar.Z </syntaxhighlight>
 
** '''''Com gzip:''''' <syntaxhighlight lang=bash>tar tvzf nome_arquivo.tar.gz </syntaxhighlight>
 
** '''''Com bzip2:''''' <syntaxhighlight lang=bash>tar tvjf nome_arquivo.tar.bz2 </syntaxhighlight>
 
* '''Extrair conteúdo de arquivo tar:'''
 
** '''''Com compress:''''' <syntaxhighlight lang=bash>tar xZf nome_arquivo.tar.Z </syntaxhighlight>
 
** '''''Com gzip:''''' <syntaxhighlight lang=bash>tar xzf nome_arquivo.tar.gz </syntaxhighlight>
 
** '''''Com bzip2:''''' <syntaxhighlight lang=bash>tar xjf nome_arquivo.tar.bz2 </syntaxhighlight>
 
 
=== Compactadores no modo texto ===
 
 
Vários compactadores de arquivos existem no Linux, e o ''nautilus'' simplifica sua seleção e uso. Esses compactadores podem ser usados também no modo texto ... aliás, eles originalmente foram criados para serem usados dessa forma ! O que o ''nautilus'' faz é facilitar seu uso por meio de uma interface gráfica.
 
 
Os principais compactadores são:
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/compress.1.html compress]: compactador mais antigo e comum nos Unix em geral, porém em desuso. Gera arquivos compactados com extensão .Z. Precisa do pacote de software ''ncompress'' no Ubuntu. Exemplo de uso: <syntaxhighlight lang=bash>
 
msobral@curl2:~/tmp$ compress palavras.txt
 
msobral@curl2:~/tmp$ ls -l palavras.txt.Z
 
-rw-rw-r-- 1 msobral msobral 932433 Jun 29 14:59 palavras.txt.Z
 
msobral@curl2:~/tmp$ uncompress palavras.txt.Z
 
msobral@curl2:~/tmp$ ls -l palavras.txt
 
-rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt</syntaxhighlight>
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/gzip.1.html GNU zip]: compactador bastante utilizado, com maior poder de compactação que ''compress''. Gera arquivos compactados com extensão .gz. Já vem instalado no Ubuntu. Exemplo de uso: <syntaxhighlight lang=bash>
 
msobral@curl2:~/tmp$ gzip palavras.txt
 
msobral@curl2:~/tmp$ ls -l palavras.txt.gz
 
-rw-rw-r-- 1 msobral msobral 532756 Jun 29 14:59 palavras.txt.gz
 
msobral@curl2:~/tmp$ gunzip palavras.txt.gz
 
msobral@curl2:~/tmp$ ls -l palavras.txt
 
-rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
 
</syntaxhighlight>
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/bzip2.1.html bzip2]: vem sendo bastante usado por ter um poder de compactação ainda maior, porém à custa de maior processamento (compactação fica mais lenta). Gera arquivos compactados com extensão .bz2. Também já vem instalado no Ubuntu. <syntaxhighlight lang=bash>
 
msobral@curl2:~/tmp$ bzip2 palavras.txt
 
msobral@curl2:~/tmp$ ls -l palavras.txt.bz2
 
-rw-rw-r-- 1 msobral msobral 720099 Jun 29 14:59 palavras.txt.bz2
 
msobral@curl2:~/tmp$ bunzip2 palavras.txt.bz2
 
msobral@curl2:~/tmp$ ls -l palavras.txt
 
-rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
 
</syntaxhighlight>
 
* [http://manpages.ubuntu.com/manpages/trusty/en/man1/xz.1.html xz]: outro compactador bastante usado recentemente. Pode compactar ainda mais que ''bzip2'', porém a um custo computacional maior. Isso significa que ele demora mais para compactar um arquivo que esse outro compactador. Gera arquivos com extensão ''.xz''. Ele já vem instalado no Ubuntu. <syntaxhighlight lang=bash>
 
msobral@curl2:~/tmp$ xz palavras.txt
 
msobral@curl2:~/tmp$ ls -l palavras.txt.xz
 
-rw-rw-r-- 1 msobral msobral 387056 Jun 29 14:59 palavras.txt.xz
 
msobral@curl2:~/tmp$ unxz palavras.txt.xz
 
msobral@curl2:~/tmp$ ls -l palavras.txt
 
-rw-rw-r-- 1 msobral msobral 2856243 Jun 29 14:59 palavras.txt
 
</syntaxhighlight>
 
 
* ... outros menos populares no mundo do Linux, tais como [http://manpages.ubuntu.com/manpages/karmic/en/man1/zip.1.html zip], [http://manpages.ubuntu.com/manpages/karmic/en/man1/rar.1.html rar] e [http://manpages.ubuntu.com/manpages/karmic/en/man1/zoo.1.html zoo].
 
 
Note que os compactadores ''compress'', ''gzip'', ''bzip2'' e ''xz'' compactam um arquivo por vez. Assim, com eles não é possível juntar vários arquivos e diretórios dentro de um único arquivo compactado (o que se faz corriqueiramente com '''zip''' ou '''rar''' ...). Portanto, se for necessário compactar um diretório ou um conjunto de arquivos, o melhor é combinar um  compactador com o programa [http://manpages.ubuntu.com/manpages/karmic/en/man1/tar.1.html tar].
 
 
=== Atividade ===
 
 
Faça os exercícios abaixo usando o ''nautilus'' e os compactadores no modo texto:
 
 
# Procure um arquivo de texto (extensão .txt, .html, ou .doc) com ao menos 100 kB e compacte-o com compress, gzip e bzip2. Compare os tamanhos dos arquivos resultantes.
 
# Usando o programa tar, compacte todo o diretório home do usuário ''aluno''. Experimente criar o arquivo tar sem compactação, e depois compactado com cada um dos compactadores vistos. Você terá portanto como resultado quatro arquivos tar diferentes ...
 
# Descompacte os arquivos tar gerados na questão anterior. Para evitar sobreposição, descompacte cada um deles em um diretório separado.
 
# Faça um backup da configuração do Kodi ... isso é importante para poder recuperar o seu centro de midia no caso de dano no disco onde ele foi instalado (experiência própria !).
 
 
= 29/10: Projeto 1: conclusão =
 
 
* [http://mymediaexperience.com/xbmc-guide/ Alguns truques com Kodi]
 
 
Hoje deve-se concluir o projeto 1, para que possa ser entregue devidamente documentado na próxima aula (05/11 - 5a feira). Lembrem que o projeto deve cumprir os objetivos descritos lá na [[PJI-2015-2#08.2F10:_Conceitos_b.C3.A1sicos_e_in.C3.ADcio_do_projeto_1|aula de 08/10]].
 
 
A versão final do projeto a ser apresentada deve conter também um toque pessoal de cada equipe. O centro de midia a ser mostrado deve conter ao menos um ''add-on'' não usual, que ofereça algum serviço ou funcionalidade extra interessante. Personalizações da interface também são bem-vindas !
 
 
 
== Um passeio pelo Linux ==
 
 
Ao longo do projeto 1 usamos o Ubuntu, uma [http://pt.wikipedia.org/wiki/Distribui%C3%A7%C3%A3o_Linux distribuição Linux]. O Ubuntu se apresenta com um ambiente gráfico razoavelmente simples de usar, mas um tanto diferente de outros sistemas operacionais largamente conhecidos (Windows e MacOS-X). As necessidades do projeto foram satisfeitas em boa parte por aplicativos (programas) acessados por meio da interface gráfica, mas houve momentos em que foi necessário usar a interface de linha de comando. Originalmente o Linux, assim como [http://en.wikipedia.org/wiki/List_of_Unix_systems outros sistemas operacionais variantes do Unix], ofereciam somente a interface de linha de comando em modo texto. Ainda hoje essa interface, conhecida como CLI (''Command Line Interface''), mantém-se muito utilizada por apresentar grande flexibilidade, expressividade, e possibilidade de automação de tarefas (outros motivos devem existir ;-). Por isso seu domínio é fundamental para os usuários técnicos, que utilizarão o sistema operacional em sua atuação profissional.
 
 
= 05/11: Projeto 1: apresentação =
 
 
A avaliação inicia com a realização de um conjunto de tarefas por cada equipe. Em seguida, os professores entrevistarão os membros de cada equipe.
 
 
 
== Tarefas ==
 
 
''Obs: as tarefas podem ser realizadas tanto pela interface gráfica quanto pela linha de comando, a não ser que se peça o contrário.''
 
 
 
1. Crie uma fonte de video e outra de música no disco do seu computador. Ambas devem se chamar ''LOCAL''. Em seguida, copie os arquivos de música e video existentes em:
 
 
 
<nowiki>http://tele.sj.ifsc.edu.br/~msobral/pji/proj1/arquivos</nowiki>
 
 
 
… e organize-os nas respectivas fontes de midia.
 
 
 
2. Crie as seguintes fontes de video, música e imagens:
 
 
''Video:'' <nowiki>http://tele.sj.ifsc.edu.br/~msobral/pji/proj1/videos</nowiki><br>
 
''Músicas:'' <nowiki>http://tele.sj.ifsc.edu.br/~msobral/pji/proj1/musicas</nowiki><br>
 
''Imagens:'' <nowiki>http://tele.sj.ifsc.edu.br/~msobral/pji/proj1/imagens</nowiki><br>
 
 
 
3. Compartilhe suas fontes de midia pela rede. Para facilitar a identificação do seu centro de midia, nomeie-o com o nome e número de sua equipe.
 
 
 
4. Teste o acesso às fontes de midia criadas. Faça o acesso tanto diretamente no seu centro de midia, quanto por meio de dispositivos em rede (ex: smartphones). Nesses testes, deve ser possível reproduzir no seu centro de midia conteúdos existentes em seus smartphones, e vice-versa.
 
 
 
5. Use um controle remoto para controlar seu centro de midia.
 
 
 
6. Faça um backup da configuração do Kodi, compactando-o da melhor forma possível. Em seguida, copie o backup para outro computador em rede, ou para um pendrive.
 
 
 
7. Prepare e demonstre as funcionalidades extras que adicionou ao seu centro de midia.
 
 
= 06/11: Projeto 2: uma infraestrutura para o centro de midia =
 
 
No projeto 1 foi implantado um centro de midia, e com ele alguns conceitos sobre sistemas operacionais e redes de computadores precisaram ser estudados. Esse projeto partiu do princípio de que a infraestrutura estaria pronta, portanto ele foi desenvolvido sobre um computador devidamente instalado e operacional, e também uma rede de computadores. Porém, em um caso real, possivelmente essa infraestrutura não exista.
 
 
O projeto 2 trata de retormar o tema do centro de midia, porém '''partindo do zero'''. Isso significa que não existe uma rede funcionando nem um computador pronto onde instalar os softwares. Assim, esse novo projeto implica implantar o seguinte cenário:
 
 
 
[[imagem:Pji1-projeto2.png]]
 
 
 
O ponto de partida é instalar o computador onde fica o centro de midia. Esse computador deve ser preparado para disponibilizar um conjunto de softwares além do Kodi, uma vez que ele também deve se apresentar de forma conveniente para que uma pessoa o utilize para tarefas corriqueira. Porém nem esse computador existe ainda ... ele deve primeiro ser montado.
 
 
<!-- [[imagem:Pji1-Network-home.gif|800px]] -->
 
 
== Plano geral de trabalho do Projeto 2 ==
 
 
* [http://canaltech.com.br/tutorial/linux/guia-como-instalar-o-ubuntu-linux/ Um guia de instalação do Ubuntu Linux]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/ubuntu_guia_do_iniciante-2-0.pdf Guia do Iniciante do Ubuntu]
 
 
 
'''A fazer coletivamente:''' quais as tarefas a serem realizadas para desenvolver este projeto ?
 
 
 
'''Tarefa 1:''' Iniciar pelo computador onde ficará o centro de midia
 
# Montar seu computador
 
# Instalar o sistema operacional
 
## Escolher uma [http://www.uniriotec.br/~morganna/guia/distribuicao.html distribuição Linux] do seu agrado. Alguns exemplos:
 
##* [http://www.ubuntu.com/ Ubuntu]
 
##* [http://www.debian.org/ Debian 8]
 
##* [https://www.opensuse.org/ OpenSUSE]
 
##* [https://www.centos.org/ CentOS]
 
## Obter a imagem de instalação do sistema operacional. Elas estão em repositórios online, e há cópias de algumas delas aqui em um servidor do IFSC:
 
##* '''Se você estiver fora do IFSC:''' [http://tele.sj.ifsc.edu.br/~msobral/pji/ubuntu-14.04.3-desktop-i386.iso Ubuntu 14.04 LTS]
 
##* '''Se você estiver no laboratório de Redes 1 do IFSC:''' [http://192.168.1.1/~msobral/ubuntu-14.04.3-desktop-i386.iso Ubuntu 14.04 LTS]
 
##* [http://tele.sj.ifsc.edu.br/~msobral/pji/debian-8.2.0-i386-CD-1.iso Debian 8]
 
## Gerar a midia com a imagem do sistema operacional a ser instalado.
 
##* Identificar o procedimento para copiar a imagem de instalação na midia escolhida
 
##* No caso de instalação em máquina virtual, basta vincular o arquivo de imagem (.iso) ao CD/DVD da máquina virtual.
 
##* No caso de um computador real, há estas opções de midia de instalação: CD, DVD, Pendrive
 
## Iniciar o computador de forma que execute o instalador contido na midia de instalação
 
## Proceder a instalação do sistema operacional
 
##* Particionar o disco de forma a poder atualizar totalmente o sistema operacional sem perder os arquivos de usuários
 
# Instalar softwares para uso geral pelo usuário (liste os softwares que você considera necessários ou interessantes ter em seu computador)
 
# Instalar os softwares do centro de midia
 
# Integrar o computador à rede
 
# Usar o computador com o sistema e softwares instalados !
 
 
 
'''OBS:''' para um primeiro contato, faremos uma instalação do sistema operacional em uma máquina virtual Virtualbox. Após ter o procedimento básico de instalação bem compreendido isso será repetido em um computador real.
 
 
= 12/11: Projeto 2: preparando o computador do centro de midia =
 
 
Na aula anterior fizemos um aquecimento, em que instalamos um sistema operacional em uma máquina virtual. Hoje iremos repetir essa tarefa, porém usando um computador real. Assim a primeira parte do projeto 2 pode ser mais realista, simulando uma situação corriqueiramente enfrentada na prática.
 
 
== Obtendo o computador ==
 
 
O computador de cada equipe precisa ser especificado e então montado. Os componentes necessários para cada computador precisam ser identificados e escolhidos, para então montá-los. Por isso, primeiro precisamos enumerar que componentes são esses. Para ajudar essa tarefa, primeiro vamos entender a estrutura geral de um computador do tipo [http://en.wikipedia.org/wiki/Personal_computer PC].
 
* [http://www.sj.ifsc.edu.br/~msobral/SOP/slides/aula1.pdf Um resumo conceitual sobre sistemas computacionais]
 
* [http://wiki.sj.ifsc.edu.br/images/1/1b/ICO_2014_Aula_03_Principais_componentes_de_Hardware.pdf Principais componentes físicos de um computador]
 
* [http://www-03.ibm.com/ibm/history/exhibits/mainframe/mainframe_album.html Fotos de antigos computadores]
 
* [http://www.extremetech.com/computing/92640-ibm-personal-computer-its-30-year-legacy-slideshow 30 anos do PC IBM]
 
 
 
[[imagem:Pji1-Computer_from_inside.jpg|600px]]
 
<br>''Um computador montado em seu gabinete
 
 
 
[[imagem:Pji1-motherboard2.jpg|600px]]
 
<br>''Uma placa-mãe de computador PC''
 
 
<!-- [[imagem:Pji1-Pc-interno.png]] -->
 
 
=== Tabela de componentes dos computadores ===
 
 
Procure no seu computador os componentes da tabela abaixo. Identifique o fabricante e modelo, e demais informações úteis.
 
 
 
{| border=1
 
!Componente
 
!Descrição
 
!Fabricante e modelo
 
!Equipe
 
|-
 
|rowspan=7 | HD || rowspan=7 | Disco rígido,<br>que armazena arquivos e diretórios|| || 1
 
|-
 
| Western Digital WD800BD || 2
 
|-
 
|Western Digital Caviar WD 800BB 80GB || 3
 
|-
 
|Samsung 160GB || 4
 
|-
 
|HD 80 GB Samsung 7200 RPM SATA 2 ||5
 
|-
 
| Sata Samsung 320 GB|| 6
 
|-
 
| SATA, 320GB, 7200 RPM, 3,5 POLEGADAS, modelo Smasun HD322-J|| 7
 
|-
 
|Fonte ||Fonte de alimentação ||  ||
 
|-
 
|rowspan=7 |RAM ||rowspan=7 |Memória RAM, usada<br>como rascunho pelos programas || || 1
 
|-
 
|Markvision M24VD293 1 GB DDR2 533 || 2
 
|-
 
|Kingston KVR 333x64C251512 PC2700 333 MHz CL 2.5 DDR DIMM || 3
 
|-
 
|DHM DDR2 667 MHz 512 MB, Kingston DDR2 1GB 667 MHz || 4
 
|-
 
|Markvision 1GB DDR2 800 MHz, Supertacent 512MB DDR2 533 MHz ||5
 
|-
 
| DDR2 2GB Samsung|| 6
 
|-
 
|Markvison 2G DDR 2 800 MHZ modelo PC6400U || 7
 
|-
 
|rowspan=7 |Placa-mãe ||rowspan=7 |Placa principal, onde reside<br>o processador e memória || || 1
 
|-
 
|Gigabyte GA-945GM-DS2 || 2
 
|-
 
|Foxconn 761GXX8ML-RS || 3
 
|-
 
|Intel DG31PR || 4
 
|-
 
|Gigabyte GA-945GM-DS2 ||5
 
|-
 
| Gigabyte GA-945 G2M-S2|| 6
 
|-
 
|Gigabyte GA-G31M-S2L || 7
 
|-
 
|rowspan=7 |Processador ||rowspan=7 |O cérebro do computador,<br>o qual executa os programas || || 1
 
|-
 
|Intel Celeron D 3 GHz || 2
 
|-
 
|AMD Athlon 64 || 3
 
|-
 
| || 4
 
|-
 
| ||5
 
|-
 
| || 6
 
|-
 
|INTEL CORE 2 - E7500, 2,93 GHz || 7
 
|-
 
|rowspan=6 |Placa de vídeo ||rowspan=6 |A interface entre o computador e o monitor || || 1
 
|-
 
|Intel Graphics 950 || 2
 
|-
 
|Integrated SIS Mirage TM1 Graphics || 3
 
|-
 
|Intel Graphics Media Accelerator 950/GeForce 7200GS 256 MB DDR2 || 4
 
|-
 
| ||5
 
|-
 
| || 6
 
|-
 
|rowspan=6 | Interface de rede ||rowspan=6 |Conecta o computador a uma rede ||  || 1
 
|-
 
|Realtek RTL811B Gigabbit || 2
 
|-
 
|Broadcomm 10/100 AC 131 Phy || 3
 
|-
 
|Realtek RTL 8111 - GR - Full-duplex 10/100/1000 || 4
 
|-
 
|onboard 10/100 ||5
 
|-
 
| || 6
 
|-
 
|rowspan=6 | Placa de som ||rowspan=6 |A saída de som do computador || || 1
 
|-
 
|Realtek 97 ALC888 codec || 2
 
|-
 
|Realtek ALC 653 5.1 || 3
 
|-
 
|ALC 883 || 4
 
|-
 
|Onboard 5.1 ||5
 
|-
 
| || 6
 
|-
 
|rowspan=6 |Interfaces E/S || rowspan=6|Interfaces de entrada e saída<br>(tipo e quantidade)||  || 1
 
|-
 
|floppy, IDE, SATA 3Gbps, USB 2.0, PCIE x16, PCIE x1, PCI, PS/2, paralela, serial, VGA || 2
 
|-
 
|USB, Serial, Paralela, VGA || 3
 
|-
 
|PS2, VGA,USB 2.0, PCIE 1x, PCIE 1x, PCI, SATA 2, floppy, IDE, UltraDMA ATA 66/100/133 || 4
 
|-
 
|PCIE 3.0, PCI x16, USB, paralela, serial, VGA, PS2 ||5
 
|-
 
| || 6
 
|-
 
|}
 
 
=== Tarefa (trazer na próxima aula: 19/11) ===
 
 
Você recebeu a tarefa de especificar um computador a ser comprado em sua empresa. Esse computador deve ser usado para rodar programas de escritório. A empresa optou por adquirir os componentes em separado, de forma a montar o computador. Sendo assim, '''selecione todos os componentes desse computador''', informando fabricante, modelo e preço. Use componentes disponíveis em mercado atualmente. Inclua figuras para ilustrar as peças do computador que você escolheu.
 
 
=== Videos ilustrativos ===
 
 
* [http://www.youtube.com/watch?v=6X2B8Z_DCo0&feature=related Eniac: o primeiro computador eletrônico]
 
* [http://www.youtube.com/watch?v=qi6i7v9jJQM Montando um computador]
 
* [http://www.youtube.com/watch?v=cNN_tTXABUA Funcionamento de um processador]
 
** [https://www.youtube.com/watch?v=7uBNCN6v_gk ... e quão quente pode ficar um processador !]
 
* [http://www.youtube.com/watch?v=Y7U8M6UsEwE&feature=related Funcionamento de um disco rígido]
 
* [http://www.youtube.com/watch?v=kdmLvl1n82U Outro video sobre funcionamento de um disco rígido]
 
 
<!-- === Atividade: medindo os níveis de tensão em um computador ===
 
 
* [http://www.eletromaniacos.com/modules.php?name=News&file=article&sid=101 Uma explicação sobre fontes ATX]
 
 
Quais são os níveis de tensão existentes dentro de um computador ? Para responder essa questão vamos fazer um pequeno experimento com seus computadores: usar um multímetro para fazer medições dentro do computador.
 
* Quais são os níveis de tensão fornecidos pela fonte do computador ?
 
* Esses níveis de tensão são contínuos ou alternados ?
 
* Seus valores variam dependendo do uso do computador ? Por exemplo, ao se copiarem arquivos de um HD, ou executar um programa ''pesado'' ?
 
 
* [http://distrowatch.com/dwres.php?resource=major Um bom guia sobre as principais distribuições Linux]
 
 
-->
 
 
== Instalação do sistema operacional ==
 
 
Para enriquecer o projeto 2, foi decidido que cada equipe deve escolher uma distribuição Linux e usá-la em seu computador. Porém, para facilitar o compartilhamento de informações e experiências entre as equipes, limitaram-se às seguintes distribuições, as quais possuem grande similaridade:
 
* [http://www.ubuntu.com Ubuntu]
 
* [http://www.debian.org Debian]
 
 
A instalação do sistema operacional segue praticamente o mesmo [[PJI-2015-2#Plano_geral_de_trabalho_do_Projeto_2|procedimento da aula anterior]]. Porém desta vez será necessário gravar a imagem do instalador do sistema operacional em um DVD ou pendrive.
 
 
=== Particionamento do disco ===
 
 
Deve-se instalar o sistema operacional com particionamento manual do disco. As partições devem ser:
 
* '''/''': a partição raiz, onde fica o sistema operacional e seus arquivos de configuração e também [http://www.guiafoca.org/cgs/guia/intermediario/ch-log.html arquivos de log] e temporários.
 
* '''/home''': a partição dos usuários, onde ficam seus diretórios pessoais.
 
* '''swap''': a [http://www.guiafoca.org/cgs/guia/intermediario/ch-disc.html#s-disc-swap partição de memória virtual], cujo tamanho deve ser ao menos igual ao da memória RAM instalada (na verdade, isso é discutível ... há muitas possibilidades para o tamanho da área de ''swap'', e ela pode inclusive não existir).
 
 
{| border="0"
 
|-
 
|[[image:Pji1-Hd-estrutura.jpg|400px]]<br><center>''A estrutura física de um disco rígido''</center> || [[image:Pji1-Particoes1.jpeg]]<br><center>''O espaço de armazenamento de um<br>disco dividido em partições''</center>
 
|}
 
 
 
O particionamento acima corresponde a uma instalação típica muito simples. A principal ideia por trás dessa escolha foi possibilitar que o sistema operacional fosse reinstalado sem que se percam os arquivos de usuários (e sem necessidade fazer backup para essa finalidade). Mas há outras possibilidades para particionamento do disco, dependendo do propósito para que o sistema operacional deve ser instalado. Essas variações serão melhor discutidas lá na 3a fase, na disciplina de Gerência de Redes.
 
 
'''OBS:''' os conceitos e termos técnicos vêm se acumulando gradativamente. Como exercício de compreensão, explique o que significa:
 
* sistema operacional
 
* partição
 
* sistema de arquivos
 
* usuário e grupo
 
* particionamento manual
 
* partição raiz
 
* diretório pessoal
 
* memória virtual
 
* memória RAM
 
* backup
 
 
=== Curiosidade: a carga do sistema operacional (boot) ===
 
 
* [http://pt.wikibooks.org/wiki/Guia_do_Linux/Iniciante+Intermedi%C3%A1rio/Gerenciadores_de_partida_%28boot_loaders%29/GRUB Guia do Linux/Iniciante+Intermediário/Gerenciadores de partida (boot loaders)/GRUB]
 
* [http://www.vivaolinux.com.br/dica/Boot-Repair-Como-recuperar-o-GRUB-facilmente Como recuperar o GRUB facilmente]
 
* [http://www.linux.org/threads/linux-bootloaders.4489/ Linux Bootloaders]
 
* [https://www.ibm.com/developerworks/library/l-linuxboot/ Inside the Linux boot process]
 
* [http://www.dedoimedo.com/computers/grub.html GRUB bootloader - Full tutorial]
 
 
 
A carga do sistema operacional corresponde ao início de sua execução. Quando o computador é ligado, o sistema operacional deve ser iniciado e isso depende do ''carregador de boot'' (''boot loader''), ou simplesmente ''boot''. O ''boot'' é um programa que carrega para a memória RAM o [http://www.guiafoca.org/cgs/guia/intermediario/ch-kern.html núcleo do sistema operacional, chamado de ''kernel''], e o executa. Lembre que o sistema operacional também é um programa ! Uma vez em execução, o sistema operacional toma conta do computador. A figura a seguir ilustra todo esse processo em um computador do tipo PC.
 
 
[[imagem:Pji-Boot1.gif]]
 
<br>''O processo de boot em um computador do tipo PC''
 
 
 
Existem diferentes ''boot loaders'', porém o mais utilizado atualmente é o [http://www.gnu.org/software/grub/ Grub]. Esse ''boot'' é bastante flexível, e também complexo ! Normalmente a instalação do sistema operacional cuida dos detalhes para a correta instalação do ''Grub'', e existem ferramentas administrativas que possibilitam sua manutenção após instalado (ex: quando se deseja ter mais de um sistema operacional no computador). Mas quando ocorrem problemas mais complicados, inevitavelmente deve-se restaurá-lo manualmente. E aí valem os tutoriais descritos nesta seção.
 
 
= 13/11: Projeto 2: ajuste fino da instalação do sistema operacional =
 
 
== ATENÇÃO: TESTE NA PRÓXIMA 5a FEIRA !!! ==
 
 
O teste será sobre a instalação de sistema operacional, incluindo alguns conceitos que vimos esta semana.
 
 
== Configuração da rede no centro de midia ==
 
 
O projeto 2 envolve não somente instalar e fazer o ajuste fino do computador que distribui a midia, mas também implantar a rede através da qual ele se comunica com outros dispositivos e com a Internet.
 
 
 
Se seu computador e demais dispositivos estão em rede, então eles precisam de um '''endereço''' para se encontrarem. Cada dispositivo capaz de se comunicar nessa rede precisa de um endereço único, para que as mensagens possam ser a eles destinadas. Na Internet esses são '''endereços IP''', que nada mais são que números compostos por 32 bits. Por questão de legibilidade, esses números são expressos por quatro octetos (grupos de 8 bits) separados por pontos, como neste exemplo:
 
 
<syntaxhighlight lang=text>
 
192.168.1.1
 
</syntaxhighlight>
 
 
Os octetos desse endereço são: 192, 168, 1 e 1.
 
 
'''Exercícios:'''
 
# escreva o endereço acima em binário.
 
# quantos endereços IP são possíveis de existir ?
 
# qual o primeiro e o último endereço IP possível ?
 
 
 
Endereços IP podem ser atribuídos às '''interfaces de rede''' de um computador. Uma interface de rede é um hardware que conecta um computador a uma rede física (mas existem interfaces de rede virtuais ... na verdade o buraco é mais embaixo nessa história ;-). Nos sistemas Linux, e Unix em geral, isso pode ser feito por meio do programa [http://manpages.ubuntu.com/manpages/precise/man8/ifconfig.8.html ifconfig], que é um acrônimo para ''interface configuration''. Com esse programa se pode tanto consultar a configuração das interfaces quanto modificá-las. Ex:
 
 
# Visualizar as interfaces ativadas e configuradas: <syntaxhighlight lang=bash>
 
ifconfig
 
</syntaxhighlight>
 
# Visualizar todas as interfaces: <syntaxhighlight lang=bash>
 
ifconfig -a
 
</syntaxhighlight>
 
# Visualizar a configuração de uma interface específica: <syntaxhighlight lang=bash>
 
# ifconfig _nome_da_interface
 
ifconfig eth0
 
</syntaxhighlight>
 
# Desativar uma interface: <syntaxhighlight lang=bash>
 
ifconfig eth0 down
 
</syntaxhighlight>
 
# Ativar uma interface: <syntaxhighlight lang=bash>
 
ifconfig eth0 up
 
</syntaxhighlight>
 
# Modificar o endereço IP de uma interface: <syntaxhighlight lang=bash>
 
ifconfig eth0 192.168.2.222
 
</syntaxhighlight>
 
 
== Atividade ==
 
 
# Configure o endereço IP da interface de rede do seu computador. A rede do laboratório usa endereços entre 192.168.1.1 e 192.168.1.254. Para o seu computador, use o endereço 192.168.1.(200+número da sua equipe)
 
# Teste a comunicação pela interface de rede. Experimente executar este programa: <syntaxhighlight lang=bash>
 
ping 192.168.1.1
 
</syntaxhighlight>
 
# Desative a interface, e teste a comunicação.
 
# Reative a interface, e faça novo teste.
 
# Reinicie o computador, e veja se a interface continua configurada.
 
# Descubra como tornar a configuração da interface de rede permanente (tanto manualmente, no modo texto, quanto usando ferramentas administrativas gráficas).
 
# '''Curiosidade:''' quantos equipamentos existem na Internet ? Isso é impossível de descobrir exatamente, mas ao menos pode-se saber '''quantos endereços IP são possíveis de existir''' na Internet como um todo. Se cada equipamento necessita ao menos um endereço IP, o número encontrado pode dar uma ideia do tamanho da Internet ...
 
#* [https://en.wikipedia.org/wiki/Global_Internet_usage#Internet_hosts Uma estatística sobre a quantidade de ''hosts'' na Internet]
 
#* [https://en.wikipedia.org/wiki/Global_Internet_usage#IPv4_addresses Uma estatística sobre a quantidade de ''endereços IPv4'' na Internet]
 
# '''Outra curiosidade:''' e se os endereços IP fossem maiores (tivessem mais bits) ? De fato, existe uma nova versão para esses endereços que usa 128 bits ao invés de 32. Quantos endereços seria possível usar nessa nova versão, chamada de '''IPv6''' ?
 
 
== Atividade extra: acesso remoto ao computador ==
 
 
Um dos objetivos do projeto é adquirir familiaridade com a operação do sistema operacional. Após a instalação do seu computador, pode-se aproveitar a oportunidade para experimentar algumas ações comuns de serem feitas nesse tipo de sistema. Dentre elas, o '''acesso e administração remota de um computador''' é de grande utilidade.
 
 
 
O acesso remoto a um computador com sistema Linux (e Unix em geral) pode ser feito de diversas maneiras. Alguns métodos possibilitam executar aplicativos gráficos remotamente, ou mesmo abrir toda a área de trabalho (''desktop''). Outros possibilitam somente obter um terminal de texto. Neste experimento o segundo tipo de acesso será usado, por ser mais simples, rápido e representativo.
 
 
O acesso remoto a um terminal de texto atualmente se faz com um aplicativo chamado [http://pt.wikipedia.org/wiki/SSH SSH (Secure Shell)]. Seu uso básico é bastante simples, bastando informar o endereço IP do computador onde se deseja fazer o acesso. Além disso, é necessário possuir uma conta de usuário nesse computador.
 
# Descubra o endereço IP do seu computador do centro de midia.
 
# Abra um terminal na máquina real (sistema hospedeiro), e conecte-se no novo computador usando o SSH: <syntaxhighlight lang=bash>
 
ssh usuario@IP_do_computador_alvo
 
</syntaxhighlight>
 
# Experimente executar o ''kodi'' por meio desse acesso com SSH. Veja o resultado na tela gráfica do computador alvo.
 
# Experimente executar este comando pelo SSH: <syntaxhighlight lang=bash>
 
sudo poweroff
 
</syntaxhighlight>
 
# Outros comandos úteis para serem usados remotamente:
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-run.html#s-run-ps ps]: mostra os processos existentes
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-run.html#s-run-top top]: mostra os processos mais ativos, junto com diversas informações sobre a utilização do sistema
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-run.html#s-run-kill kill]: mata um processo (ou apenas lhe envia um sinal ...)
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-run.html#s-run-killall killall]: mata todos os processos de acordo com algum critério (ex: pelo nome)
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmdd.html Comandos para manipulação de diretórios (pastas)]
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmd.html Comandos para manipulação de arquivos]
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmdc.html#s-cmdc-passwd passwd]: muda a senha de um usuário
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmdc.html#s-cmdc-users users]: lista os usuários logados no sistema
 
#* [http://www.guiafoca.org/cgs/guia/intermediario/ch-cmdn.html#s-cmdn-who who]: mostra quem está conectado a seu computador
 
#* [http://www.guiafoca.org/cgs/guia/intermediario/ch-cmdn.html#s-cmdn-w w]: mostra quem está conectado em seu computador, e que programa está executando
 
#* [http://www.guiafoca.org/cgs/guia/iniciante/ch-bas.html#s-basico-logout Saída do sistema]
 
 
 
Agora que vocês já sabem como acessar remotamente um computador que rode Linux, experimentem acessar um servidor de teste existente na rede do IFSC. Esse servidor foi criado especialmente para nossa disciplina de Projeto. Pode-se acessá-lo tanto de dentro do câmpus São José, quanto de fora do IFSC. Seu nome DNS é ''prg2.sj.ifsc.edu.br'' (e seu endereço IP é 200.135.233.75), e o usuário é ''aluno'' (a senha será fornecida em aula).
 
* Que arquivos de video existem lá ? E de música ?
 
* Copie os arquivos identificados para o seu computador. ''Dica: veja os programas'' [http://www.guiafoca.org/cgs/guia/intermediario/ch-cmdn.html#s-cmdn-ftp ftp], [http://www.guiafoca.org/cgs/guia/avancado/ch-s-ssh.html#s-s-ssh-cliente-scp scp], [http://www.guiafoca.org/cgs/guia/avancado/ch-s-ssh.html#s-s-ssh-cliente-sftp sftp] e [http://www.vivaolinux.com.br/artigo/Explorando-o-wget?pagina=3 wget].
 
{{collapse top|Exemplos de uso do comando scp}}
 
<syntaxhighlight lang=bash>
 
# Copia o arquivo teste.txt para o diretório pessoal do aluno no computador 200.135.233.75
 
# Note que "." é o diretório de destino no computador remoto, que corresponde ao diretório de trabalho
 
# acessado pelo scp ... como o acesso foi realizado como usuário aluno,
 
# "." corresponde ao diretório pessoal do aluno
 
scp teste.txt aluno@200.135.233.75:.
 
 
# Faz o inverso ... copia o arquivo teste.txt para o diretório atual
 
scp aluno@200.135.233.75:teste.txt .
 
 
# Agora copia todos os arquivos com extensão mp3 para o diretório "Downloads"
 
# no computador remoto
 
scp *.mp3 aluno@200.135.233.75:Downloads/
 
 
# Por fim, copia todos os arquivos .mp3 do computador remoto de volta para seu computador,
 
# para dentro do subdiretório "Musicas"
 
scp "aluno@200.135.233.75:Downloads/*.mp3" Musicas/
 
</syntaxhighlight>
 
{{collapse bottom}}
 
* Agora copie algum arquivo do seu computador para esse computador da disciplina. Crie lá uma pasta com o seu nome, e coloque os arquivos lá dentro.
 
 
'''OBS:'''
 
* se você estiver usando um computador com Linux ou MAC-OS X, use o programa ''ssh'' para fazer o acesso remoto.
 
* se estiver usando Windows, use o programa [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html putty], que é um cliente ''SSH''.
 
 
== Para esquentar: explorando a linha de comando ==
 
 
Após instalar o sistema operacional em seu computador, propõe-se uma atividade para exercitar o uso da linha de comando.
 
# A partir de outro computador do laboratório, acesse seu computador usando ssh.
 
# Copie os arquivos de música, video e imagem do servidor de Tele para seu diretório pessoal. Dica: ver os programas ''wget'', ''lynx'', ''w3m''
 
#* [http://tele.sj.ifsc.edu.br/~msobral/pji/videos Videos]
 
#* [http://tele.sj.ifsc.edu.br/~msobral/pji/musicas Musicas]
 
#* [http://tele.sj.ifsc.edu.br/~msobral/pji/imagens Imagens]
 
# Crie dentro de sua pasta (diretório) pessoal um diretório chamado ''Midia'' (ver [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmdd.html comandos para manipulação de diretórios])
 
# Dentro desse novo diretório crie três outros diretórios: ''Musicas'', ''Filmes'', ''Fotos''
 
# Mova os arquivos transferidos no passo 1 para seus diretórios correspondentes (ver [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmd.html comandos para manipulação de arquivos])
 
# Remova os arquivos de midia de que você não gostou ;-)
 
# [http://manpages.ubuntu.com/manpages/trusty/man8/reboot.8.html Desligue] o computador
 
 
= 19/11: Projeto 2: explorando o sistema operacional =
 
 
== Permissões de arquivos e diretórios ==
 
 
* [http://www.guiafoca.org/cgs/guia/iniciante/ch-perm.html Uma explicação mais detalhada no Guia Foca Linux]
 
 
 
As permissões de acesso a arquivos e diretórios permitem proteger o sistema de arquivos do Linux do acesso indevido por pessoas ou programas não autorizados.O princípio da segurança está baseado no conceito de '''usuário dono''' ou '''proprietário''', ''grupo'' e ''demais usuários''. Um arquivo sempre possui um usuário que é o seu ''proprietário''. Quando um usuário cria um arquivo ou diretório, ele passa a ser o seu dono. No entanto, o arquivo poderá ser repassado a outro usuário. O ''grupo'' permite atribuir permissões de acesso a arquivos e diretórios comuns a um ''grupo de usuários''. Por fim, ''demais usuários (outros)'' são usuários que não são donos nem pertencem ao grupo do arquivo ou diretório.
 
 
<syntaxhighlight lang=text>
 
Lembrar que um usuário do sistema é identificado pelo seu nome de login, ao qual existe associado
 
um número chamado UID (''user ID''). Uma coleção de usuários pode pertencer a um grupo. Um grupo
 
também possui um nome e um identificador numérico (''GID'').
 
</syntaxhighlight>
 
 
As permissões podem ser do tipo:
 
* '''leitura (''r'')''': permite o acesso ao conteúdo de arquivos; no caso de diretório, permite listar seu conteúdo.
 
* '''escrita (''w'')''': permite alterar o conteúdo do arquivo; no caso de diretório, permite criar arquivos ou subdiretórios dentro dele
 
* '''execução (''x'')''': permite executar um arquivo (caso seja um programa); no caso de diretório, permite entrar nele.
 
 
 
O acesso a um arquivo/diretório se dá da seguinte forma:
 
# Se o usuário que tentou o acesso for seu dono: verificam-se as permissões correspondentes ao proprietário do arquivo.
 
# Se o usuário pertence ao grupo dono do arquivo: verificam-se as permissões correspondentes a esse grupo
 
# Demais usuários: verificam as permissões para demais usuários (outros)
 
 
[[imagem:Pji-Permissoes2.png]]
 
<br>Um arquivo e suas permissões
 
 
=== Modificação de permissões ===
 
 
* [http://www.guiafoca.org/cgs/guia/iniciante/ch-perm.html#s-perm-chmod comando chmod no Guia Foca Linux]
 
 
O programa [http://manpages.ubuntu.com/manpages/trusty/man1/chmod.1.html chmod] é usado para modificar permissões de arquivos e diretórios. As permissões podem ser especificadas de duas maneiras diferentes, sendo a simbólica a mais simples (depende do gosto do freguês). Veja este exemplo de mudança de permissão de forma simbólica:
 
 
<syntaxhighlight lang=bash>
 
# cria um arquivo para demonstração
 
touch teste.txt
 
 
# remove a permissão de escrita para grupo dono e demais usuários
 
chmod go-w teste.txt
 
 
# Ativa permissão de leitura e execução para todos
 
chmod a+rx teste.txt
 
</syntaxhighlight>
 
 
As permissões especificadas de forma simbólica seguem a seguinte regra:
 
* Uma ou mais letras para especificar quem é alvo da mudança de permissão:
 
** '''a''': todos usuários (dono, grupo dono e demais usuários)
 
** '''u''': usuário dono
 
** '''g''': grupo dono
 
** '''o''': outros usuários
 
* Um operador para indicar se permissão deve ser adicionada ou removida:
 
** '''+''': adicionar permissão
 
** '''-''': remover permissão
 
** '''=''': definir permissão
 
* Uma combinação de letras para indicar as permissões envolvidas:
 
** '''r''': leitura
 
** '''w''': escrita
 
** '''x''': execução
 
 
As permissões podem ser especificadas também de forma numérica. Para entender como isso funciona, cada permissão deve ser representada por um bit: se a permissão estiver ativada, esse bit vale '''1''', caso contrário vale '''0'''. Assim, podem-se representar as 9 permissões (três possíveis permissões para cada categoria de usuário: dono, grupo e outros usuários) como bits:
 
 
<syntaxhighlight lang=text>
 
rwxrwxrwx ---> 111111111
 
rwxr-xr-x ---> 111101101
 
rw-r--r-- ---> 110100100
 
</syntaxhighlight>
 
 
A representação numérica é feita em octal, pois fica mais simples de calcular. Cada dígito octal representa uma categoria de usuário (dono, grupo, ou demais usuários). Como são três permissões por categoria, podem-se expressá-las como um digito octal. Os exemplos acima ficariam assim:
 
 
<syntaxhighlight lang=text>
 
rwxrwxrwx ---> 111111111 ---> 777
 
rwxr-xr-x ---> 111101101 ---> 755
 
rw-r--r-- ---> 110100100 ---> 644
 
</syntaxhighlight>
 
 
Com isso, as permissões podem ser modificadas diretamente com esses números octais:
 
 
<syntaxhighlight lang=bash>
 
# cria um arquivo para demonstração
 
touch teste.txt
 
 
# remove a permissão de escrita para grupo dono e demais usuários
 
# usuário dono pode ler e modificar o arquivo
 
chmod 644 teste.txt
 
 
# Ativa permissão de leitura e execução para todos
 
# usuário dono pode também modificar o arquivo
 
chmod 755 teste.txt
 
</syntaxhighlight>
 
 
=== Exercícios sobre permissões ===
 
 
# '''Investigação sobre o efeito das permissões em arquivos e diretórios'''
 
## Mude para o diretório /home, usando o comando: <syntaxhighlight lang=bash>
 
cd ..
 
</syntaxhighlight>
 
## Liste seu conteúdo com o comando: <syntaxhighlight lang=bash>
 
ls -l
 
</syntaxhighlight>
 
## Verifique quantos usuários diferentes possuem diretórios pessoais abaixo do /home e os grupos aos quais pertencem
 
## Quais as permissões dos diretórios pessoais abaixo do /home?
 
## Mude para um dos diretórios pessoais abaixo do /home e tente criar um arquivo com o comando ''touch''. O que acontece?
 
## Mude para o diretório /etc e liste seu conteúdo com os comandos:<syntaxhighlight lang=bash>
 
cd /etc
 
ls -l
 
</syntaxhighlight>
 
## Verifique quem é o dono e o grupo dos arquivos e diretórios que estão em /etc
 
## Verifique as permissões do arquivo ''passwd'' dentro do /etc
 
## Abra o arquivo ''passwd'' com o editor ''vi'' ou ''nano'' e tente salvar. O que acontece?
 
# '''Modificando permissões de arquivos e diretórios'''
 
## Mudar para o diretório pessoal, com o comando ''cd''
 
## Criar no diretório pessoal mais dois subdiretórios, chamados ''dir2'' e ''dir3''
 
## Criar no diretório pessoal mais dois arquivos, chamados ''arq2'' e ''arq3''
 
## Verifique as permissões dos arquivos criados
 
## Mude as permissões de ''arq2'' para que o dono, o grupo e os outros tenham acesso completo ao arquivo
 
## Mude as permissões de ''arq3'' para que o somente o dono tenha acesso completo ao arquivo e o grupo e os demais usuários tenham somente acesso para leitura
 
## Mude as permissões do diretório ''dir2'', retirando todas as permissões, inclusive as do dono
 
## Tente entrar no diretório ''dir2''. O que acontece? Repita o experimento com diferentes combinações de permissões.
 
## Mude as permissões do diretório ''dir2'' de forma que possa novamente entrar neste diretório
 
# '''Aplicação ao projeto 2'''
 
## Restrinja o acesso aos arquivos de midia obtidos na aula anterior. Eles devem poder ser reproduzidos apenas pelo seu usuário dono.
 
 
= 26/11: Visita técnica a Oi =
 
 
= 20 e 27/11: Projeto 2: adição de novos discos ou partições =
 
 
Hoje continuaremos exercitando o uso da linha de comando, mas também faremos algumas tarefas relacionadas ao projeto 2.
 
 
 
'''OBS:''' A parte sobre redes de computadores no projeto 2 será iniciada tão logo se tenha dominado o uso do sistema operacional, e o computador do centro de midia estiver preparado.
 
 
== Adicionando novos discos e midias ao seu computador ==
 
 
* [http://www.guiafoca.org/cgs/guia/intermediario/ch-disc.html Guia Foca Linux: Discos e Partições]
 
* [https://help.ubuntu.com/community/LinuxFilesystemsExplained Explicação sobre sistemas de arquivos no Linux (bem técnico)]
 
 
Imagine que um novo disco rígido foi instalado no seu computador. O que é necessário fazer para usá-lo ? O mesmo vale para o uso de um pendrive, ou a leitura de um DVD ou CD. Essas midias armazenam arquivos, e, desta forma, possuem um sistema de arquivos. Mas como integrá-lo ao sistema operacional ?
 
 
 
Primeiro de tudo, essa nova unidade de armazenamento deve ser '''formatada'''. Isso significa que deve ser preparada para que arquivos e diretórios possam ser armazenados. A ''formatação'' implica escolher um tipo de sistema de arquivos, e [https://wiki.debian.org/FileSystem existem vários deles disponíveis]. Essa escolha pode ser bastante técnica, dependendo do que se precisa guardar na midia. Mas, para os nossos propósitos, vamos nos restringir aos sistemas de arquivos mais populares:
 
 
{| border="1"
 
!Sistemas de arquivos
 
!Tipo de midia
 
|-
 
|ext4fs, ext3fs, xfs, btrfs, jfs||discos rígidos
 
|-
 
|vfat, fat32 || pendrives
 
|-
 
|iso9660 e variações || CD, DVD
 
|}
 
 
 
Segundo, a midia formatada deve ser integrada à árvore de diretórios. Essa integração, chamada de montagem,  implica ela ser adicionada à árvore de diretórios por meio de um ponto de montagem. Após isso, a midia pode ser utilizada para guardar ou acessar novos arquivos.
 
 
 
[[imagem:Pji-Filesystem-tree-mountpoints.png|400px]]
 
<br>''Uma árvore de diretórios com três sistemas de arquivos nos pontos de montagem /, /home e /usr''
 
 
=== Atividade ===
 
 
Uma nova partição deve ser criada em seu disco rígido (HD). Imagine que essa partição será usada para armazenar arquivos de midia (filmes e músicas), e deve estar montada em ''/home/midia''. Porém como na instalação do sistema operacional todo o espaço em disco já foi alocado (utilizado), é necessário reparticionar o disco com o menor esforço possível (e sem perder arquivos !).
 
 
 
'''Passos:'''<br><br>
 
1. Na linha de comando, investigar como foi realizado o particionamento do disco. O disco rígido é do tipo SATA, e dentro do Linux ele é representado pelo pseudo-arquivo ''/dev/sda''. Mostre as partições desse disco usando o programa [http://manpages.ubuntu.com/manpages/utopic/en/man8/fdisk.8.html fdisk]: <syntaxhighlight lang=bash>
 
sudo fdisk -l /dev/sda
 
</syntaxhighlight>
 
2. Note que deve haver três partições. Use o programa [http://manpages.ubuntu.com/manpages/trusty/man1/df.1.html df] para identificar qual delas corresponde a ''/home'': <syntaxhighlight lang=bash>
 
df -k /home
 
</syntaxhighlight>
 
3. Faça uma cópia de segurança (''backup'') dos dados existentes em ''/home''. A forma mais simples é compactar tudo que existir dentro de ''/home'', e depois copiar o arquivo compactado para um pendrive ou para outro computador na rede (dica: pode ser aquele computador da disciplina acessível de fora do Ifsc).
 
* [[PJI-2015-2#Usando_o_compactador_tar:_outro_guia_r.C3.A1pido|Guia de utilização de um compactador muito popular no mundo do Unix !]]
 
4. Agora use o programa ''fdisk'' para:<br>
 
4.1 Remover a partição ''/home''<br>
 
4.2 Criar duas novas partições no espaço que foi liberado: uma para o ''/home'' e outra para ''/home/midia''. Aloque o mesmo espaço em disco para ambas.
 
* [[PJI-2015-2#Criando_parti.C3.A7.C3.B5es:_um_guia_r.C3.A1pido|Guia rápido para manipular partições]]
 
5. Formate as partições criadas: a formatação envolve escolher um tipo de sistema de arquivos e então usar seu formatador.<br>
 
{| border=1
 
!Sistema de arquivos
 
!Formatador
 
|-
 
|[http://en.wikipedia.org/wiki/Ext4 ext4fs] || '''mke2fs''' -t ext4 -j nome_do_disco_e_partição
 
|-
 
|[http://en.wikipedia.org/wiki/Ext3 ext3fs] || '''mke2fs''' -t ext3 -j nome_do_disco_e_partição
 
|-
 
|[http://en.wikipedia.org/wiki/FAT_filesystem_and_Linux vfat] || '''mkfs.vfat''' nome_do_disco_e_partição
 
|-
 
|[https://wiki.ubuntu.com/XFS xfs] || '''mkfs.xfs''' nome_do_disco_e_partição
 
|-
 
|[http://en.wikipedia.org/wiki/JFS_%28file_system%29 JFS] || '''mkfs.jfs''' nome_do_disco_e_partição
 
|}<br>
 
6. Monte o novo sistema de arquivos em ''/home/midia'': <syntaxhighlight lang=bash>
 
mount nome_do_disco_e_partição /home/midia
 
</syntaxhighlight>
 
7. Verifique a capacidade do novo sistema de arquivos: <syntaxhighlight lang=bash>
 
df -k /home/midia
 
</syntaxhighlight>
 
8. Teste a criação de arquivos e diretórios no novo sistema de arquivos.<br>
 
9. Torne permanente a montagem desse sistema de arquivos em ''/home/midia'' ... vejam para isso o arquivo ''/etc/fstab''.
 
 
== Criando partições: um guia rápido ==
 
 
O particionamento de disco APÓS a instalação do sistema operacional pode ser necessária em algum momento. O procedimento a ser visto em boa parte pode ser aplicado também ao caso da instalação de um segundo (ou terceiro ...) disco ao computador. Basicamente deve-se fazer o seguinte:
 
# Usar um programa de particionamento para editar a tabela de partições do disco: no modo texto pode-ser usar os programas [http://manpages.ubuntu.com/manpages/trusty/en/man8/fdisk.8.html fdisk] ou [http://manpages.ubuntu.com/manpages/trusty/en/man8/parted.8.html parted], e no modo gráfico o [http://manpages.ubuntu.com/manpages/trusty/man8/gparted.8.html gparted]. <syntaxhighlight lang=bash>
 
fdisk /dev/sda
 
</syntaxhighlight>
 
# Formatar a nova partição, o que serve para criar um ''sistema de arquivos'' dentro da partição: isso depende do tipo de sistema de arquivos a ser criado. Para simplificar, vamos usar o tipo mais comum em sistemas Linux atualmente, que é o ''ext4''. O programa de formatação no modo texto se chama [http://manpages.ubuntu.com/manpages/trusty/man8/mke2fs.8.html mke2fs]. No modo gráfico isso pode ser feito com o próprio [http://manpages.ubuntu.com/manpages/trusty/man8/gparted.8.html gparted]. <syntaxhighlight lang=bash>
 
# OBS: substitua /dev/sda7 pelo caminho da partição que você criou !!!
 
mke2fs -j /dev/sda7
 
</syntaxhighlight>
 
# Montar o novo sistema de arquivos em algum diretório, para que possa ser utilizado: isso deve ser feito no modo texto, usando-se o comando [http://manpages.ubuntu.com/manpages/precise/man8/mount.8.html mount]. <syntaxhighlight lang=bash>
 
# OBS: substitua /dev/sda7 pelo caminho da partição que você criou, e /mnt pelo diretório
 
# onde quer montá-la !!!
 
mount /dev/sda7 /mnt
 
</syntaxhighlight>
 
 
= 03/12: Projeto 2: Criando usuários e grupos =
 
 
Hoje devemos continuar o estudo sobre o uso do sistema operacional Linux, e aplicar alguns dos conceitos e técnicas ao projeto 2. Serão introduzidos a criação de usuários e grupos, que são fundamentais para estabelecer alguma forma de proteção a arquivos e diretórios (entre outras coisas). Também será apresentado o conceito de processos, que são programas em execução, mostrando-se como obter informações sobre processos existentes e como terminá-los. O domínio desses conceitos habilita um usuário a tirar maior proveito do sistema, além de usá-lo com maior discernimento.
 
 
== Para esquentar: relembrando a manipulação de arquivos e permissões ==
 
 
# Usando [[PJI-2015-2#Para_esquentar:_explorando_a_linha_de_comando|algum utilitário de linha de comando]], obtenha [http://200.135.233.75/pji/coisas.tar este arquivo].
 
# Usando o [[PJI-2015-2#tar|programa tar]], descompacte o arquivo transferido.
 
# Organize os arquivos de música, video e imagem ali contidos. Ponha cada tipo de de arquivo em um subdiretório (ex: ''musicas'', ''imagens'', ''videos'').
 
# Verifique o acesso aos arquivos: tente reproduzi-los e, caso detecte alguma limitação de acesso, [[PJI-2015-2#Permiss.C3.B5es_de_arquivos_e_diret.C3.B3rios|corrija suas permissões]]. Suponha que eles devam ser acessados somente pelo usuário dono.
 
 
== Usuários e grupos ==
 
 
* [http://www.guiafoca.org/cgs/guia/iniciante/ch-cmdc.html Ver também o Guia Foca Linux]
 
 
Usuários e grupos estão intimamente relacionado com as permissões de acesso a arquivos e diretórios. Afinal para que eles servem ? Pelo que discutimos até o momento, isso está fortemente relacionado com a proteção de recursos mantidos pelo sistema operacional (arquivos, diretórios, processos, ...). Em um sistema Linux instalado há vários usuários. Isso pode ser verificado usando o programa [http://manpages.ubuntu.com/manpages/trusty/man1/ps.1.html ps] para fazer uma listagem dos processos em execução:
 
 
<syntaxhighlight lang=bash>
 
aluno@M1:~$ ps aux
 
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
root        1  0.0  0.0  26664  2356 ?        Ss  Mar24  0:03 /sbin/init
 
root        2  0.0  0.0      0    0 ?        S    Mar24  0:00 [kthreadd]
 
root        3  0.0  0.0      0    0 ?        S    Mar24  0:05 [ksoftirqd/0]
 
syslog    977  0.0  0.0 249476  1008 ?        Sl  Mar24  0:09 rsyslogd -c5
 
root      1001  0.0  0.0 104056  3288 ?        Ss  Mar24  0:00 /usr/sbin/cupsd
 
avahi    1005  0.0  0.0  34456  1772 ?        S    Mar24  0:02 avahi-daemon
 
bind      1268  0.0  0.3 237744 12680 ?        Ssl  Mar24  0:00 /usr/sbin/named
 
daemon    1279  0.0  0.0  16912  368 ?        Ss  Mar24  0:00 atd
 
msobral  5351  0.0  0.0 253876  2588 ?        Sl  Mar24  0:00 bash
 
www-data  5576  0.0  0.0  64436  1956 ?        S    Mar24  0:00 /usr/sbin/apache2
 
</syntaxhighlight>
 
 
* '''Atividade:''' descubra quantos usuários diferentes são donos dos processos em seu computador ...
 
** ''Do jeito difícil:'' executar ''ps aux'' e contar os usuários diferentes que aparecem na listagem. O problema é que essa listagem pode ser longa ...
 
** ''Do jeito fácil:'' pode-se explorar melhor o comando ''ps'', e combiná-lo com outros programas (ex: para juntar as linhas em que aparecem os mesmos usuários, e em seguida para eliminar as linhas com usuários repetidos). Isso mostra um pouco do que se consegue fazer na linha de comando ... ''dicas: ver programas [http://manpages.ubuntu.com/manpages/trusty/man1/sort.1.html sort], [http://manpages.ubuntu.com/manpages/trusty/man1/uniq.1.html uniq] e [http://manpages.ubuntu.com/manpages/trusty/man1/wc.1.html wc]''
 
 
== Adicionando usuários ou grupos ==
 
 
Uma vez tendo o sistema operacional instalado, pode ser necessário adicionar ou remover usuários. Por exemplo, você instalou um computador que será usado por outras pessoas (seus familiares). Como isso pode ser feito na distribuição que você escolheu ?
 
 
* Como adicionar ou modificar usuários e grupos pela interface gráfica ?
 
* E como fazer isso pela interface de linha de comando (modo texto) ? Que programas podem ser usados ?
 
* '''[CURIOSIDADE]''': ... e se não houver nenhuma programa que crie, modifique ou remova usuários e grupos ? Como fazer esse tipo de operação nesse caso ?
 
 
{| border="1"
 
!Programa
 
!Ambiente
 
!Descrição ou exemplo
 
|-
 
| [http://manpages.ubuntu.com/manpages/trusty/man8/adduser.8.html adduser] || texto || Adiciona um usuário
 
|-
 
| [http://manpages.ubuntu.com/manpages/trusty/man8/useradd.8.html useradd] || texto || Adiciona um usuário
 
|-
 
| [http://manpages.ubuntu.com/manpages/trusty/man8/addgroup.8.html addgroup] || texto || Adiciona um grupo
 
|-
 
| [http://manpages.ubuntu.com/manpages/trusty/man8/groupadd.8.html groupadd] || texto || Adiciona um grupo
 
|-
 
| [http://ubuntuhandbook.org/index.php/2013/07/users-and-groups-management-tool-on-ubuntu-13-04-13-10/ Contas de usuários] || gráfico || Adiciona um usuário (só no Ubuntu)
 
|-
 
| [http://tele.sj.ifsc.edu.br/~msobral/pji/lsusers lsusers] || texto || lista todos os usuários do sistema<br>clique no link e faça o download do programa<br>execute-o assim: '''python''' ''lsusers''
 
|}
 
 
=== Atividade relacionada ao projeto 2 ===
 
 
No computador do projeto 2 devem existir pelo menos dois usuários:
 
# '''Um usuário com poderes de administrador:''' esse usuário é aquele que foi criado quando se instalou o Ubuntu. Ele consegue usar o programa [http://manpages.ubuntu.com/manpages/trusty/en/man8/sudo.8.html sudo] para executar programas como supersuário (''root'').
 
# '''Um usuário para ser usado por visitantes:''' esse usuário pode ser usado por outras pessoas que precisem trabalhar no computador. Ele não deve conseguir usar o ''sudo'' para executar programas como superusuário !
 
#* Aliás, o que torna um usuário capaz de executar programas como superusuário usando [http://manpages.ubuntu.com/manpages/trusty/en/man8/sudo.8.html sudo] no Ubuntu (e em outros sistemas que usam esse programa) ?
 
 
 
Certifique-se de que existam esses dois usuários. Para isso use algum dos programas de criação de contas vistos nesta seção.
 
 
== ATENÇÃO: teste na próxima 6a feira (04/12) ==
 
 
O teste envolve questões relacionadas à instalação sistema operacional ...
 
 
= 04/12: Projeto2: Processos e entrada/saída padrão =
 
 
Hoje daremos continuidade à preparação do centro de midia em seus computadores. Isso envolve ampliar o entendimento de como funciona o sistema operacional, para que possam melhor usá-lo. Aula passada vimos como usuários e grupos podem ser usados para organizar e proteger o acesso a recursos mantidos pelo sistema operacional (arquivos, programas, dispositivos de entrada e saída, ...). Hoje estudaremos o que são processos, como obter informações sobre eles e como terminá-los. Além disso, veremos também como processos podem usar suas entrada e saída padrão para receber dado para processar e apresentar resultados, e também para se comunicarem.
 
 
== ATENÇÃO: TESTE NA PRÓXIMA 5a FEIRA (10/12) ==
 
 
O teste da próxima 5a feira cobrirá os exercícios sobre uso da linha de comando trabalhados na semana passada: manipulação de arquivos e diretórios, execução de programas, permissões de acesso a arquivos (interpretação e modificação), usuários e grupos.
 
 
== Processos ==
 
 
Já vimos que sistemas operacionais modernos, como Linux, FreeBSD, Windows, e Android, são capazes de executar múltiplos programas ao mesmo tempo. No caso dos sistemas operacionais Unix, e o Linux pertence a essa família, processos são '''programas em execução'''. Um programa contém instruções e dados armazenados em um arquivo. Ao ser executado um arquivo, cria-se um processo. O sistema operacional carrega as instruções e dados em memória RAM, e faz o processador executá-las. Múltiplos processos podem ser criados a partir do mesmo arquivo de programa, sendo executados de forma independente. Os detalhes de como manter todos os processos em memória, e revezar suas execuções de forma a parecer que são simultâneos, são responsabilidade do sistema operacional.
 
 
 
Vários utilitários (programas auxiliares) existem para obter informações do sistema operacional sobre processos e memória. Alguns trabalham em modo texto, como:
 
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man1/ps.1.html ps]:''' lista os processos existentes
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man1/pstree.1.html pstree]:''' lista os processos existentes mas de forma hierárquica
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man1/top.1.html top]:''' lista os processos mais ativos, junto com informações globais sobre uso dos recursos no sistema operacional (memória, processador, memória virtual, quantidade de processos, carga de trabalho)
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man1/atop.1.html atop]:''' o mesmo que '''top''', mas com maior detalhamento do uso de recursos mantidos pelo sistema operacional
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man1/mpstat.1.html mpstat]:''' mostra estatísticas  de uso do processador
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man1/free.1.html free]:''' mostra o uso de memória
 
* '''[http://manpages.ubuntu.com/manpages/karmic/en/man8/vmstat.8.html vmstat]:''' mostra o uso de memória, discos e processador no último intervalo de tempo.
 
 
 
[[imagem:Pji-procs.png]]
 
<br>''Alguns processos mostrados com o comando '''ps au'''''
 
 
 
Existem também utilitários no modo gráfico. Por exemplo, no Ubuntu há o "Monitor do sistema". No Debian existe também esse aplicativo se o ambiente gráfico em uso for o Gnome.
 
 
 
'''Para nosso propósito, é importante saber que:'''
 
* Cada processo possui um usuário e grupo dono, que são obtidos do usuário que o criou. Essas duas informações são usadas para fazer o controle de acesso a arquivos e diretórios, comparando-os com suas permissões.
 
* Cada processo possui um número chamado de PID (''Process IDentifier'') que o identifica no sistema.
 
* A memória RAM utilizada por um processo é deu uso exclusivo: nenhum processo consegue acessar (ler ou modificar) a memória de outro processo.
 
* Processos podem ser pausados ou mesmo terminados. Há dois programas para terminar processos:
 
** [http://manpages.ubuntu.com/manpages/trusty/man1/kill.1.html kill]: termina um ou mais processos informados por seus PID.  Uso básico: <syntaxhighlight lang=bash>
 
# Solicita ao processo com PID 1234 que termine (esse processo pode ignorar e continuar executando)
 
kill 1234
 
 
# Mata sumariamente o processo 1234
 
kill -9 1234
 
</syntaxhighlight>
 
** [http://manpages.ubuntu.com/manpages/trusty/man1/killall.1.html killall]: termina um ou mais processos informados por seus nomes, por seus usuários donos, entre outras possibilidades. Uso básico: <syntaxhighlight lang=bash>
 
# Solicita ao processo chamado firefox que termine (ele pode ignorar)
 
killall firefox
 
 
# Mata sumariamente o processo firefox
 
killall -9 firefox
 
</syntaxhighlight>
 
 
=== Atividade ===
 
 
# Experimente matar alguns processos, seja pelo PID ou pelos seus nomes, e ver o que acontece ... Lembre que para isso se usam os programas [http://manpages.ubuntu.com/manpages/trusty/man1/kill.1.html kill] ou [http://manpages.ubuntu.com/manpages/trusty/man1/killall.1.html killall].
 
# Copie [http://tele.sj.ifsc.edu.br/~msobral/pji/teimoso este programa] para seu computador. Em seguida execute-o: <syntaxhighlight lang=bash>
 
./teimoso
 
</syntaxhighlight> ... e tente matá-lo.
 
 
 
== Entrada e saída padrão ==
 
 
Até o momento usaram-se arquivos, diretórios, e executaram-se programas para diferentes finalidades. Os programas de linha de comando do Linux são especializados, o que significa que tipicamente servem para realizar um único tipo de tarefa. Como são programas de linha de comando, ao serem executados possuem uma entrada de dados e também uma saída de dados. A operação do sistema operacional via linha de comando envolve entender e saber utilizar esses mecanismos existentes nesses programas.
 
 
 
Todo processo possui uma saída padrão, que corresponde a um arquivo ou dispositivo onde os dados de saída do processo (ex: mensagens de texto) serão mostrados. E assim como existe uma saída padrão, todo processo possui uma entrada padrão que corresponde ao arquivo ou dispositivo de onde por ''default'' são obtidos os dados de entrada.
 
 
[[imagem:Sop-redir.png|800px]]
 
 
=== Alguns utilitários de uso comum ===
 
 
Esses utilitários são programas úteis para operações do dia-a-dia com arquivos, e serão úteis para ilustrar os conceitos de entrada e saída padrão:
 
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/cut.1.html cut:] divide as linhas dos arquivos em colunas, e mostra colunas específicas
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/grep.1.html grep:] mostra linhas de arquivos que contenham determinada palavra ou padrão de caracteres
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/sort.1.html sort:] ordena as linhas de um arquivo
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/wc.1.html wc:] conta linhas, palavras e caracteres
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/tail.1.html tail:] mostra as últimas linhas de um arquivo
 
* [http://manpages.ubuntu.com/manpages/trusty/en/man1/head.1.html head:] mostra as primeiras linhas de um arquivo
 
* [http://manpages.ubuntu.com/manpages/trusty/en/man1/uniq.1.html uniq]: mostra ou omite as linhas repetidas de um arquivo
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/du.1.html du:] mostra a utilização de disco de um determinado arquivo ou diretório
 
* [http://manpages.ubuntu.com/manpages/karmic/en/man1/paste.1.html paste:] combina linhas de arquivos
 
 
=== Redirecionamento de saída padrão ===
 
 
Normalmente a saída padrão de um processo é a tela do terminal, mas ela pode ser redirecionada para um arquivo ou para outro dispositivo. Assim, as mensagens de texto que um processo gera podem ser guardadas em um arquivo para posterior utilização. No exemplo abaixo, a listagem dos processos foi guardada no arquivo ''processos.txt'':
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ ps ax > processos.txt
 
aluno@D1:~$
 
</syntaxhighlight>
 
 
O redirecionamento de saída padrão se faz com o símbolo '''>''' seguido do nome do arquivo. Note que nada aparece na tela, uma vez que a saída se tornou o arquivo ''processos.txt''. Após executar o comando acima, veja o conteúdo de ''processos.txt'':
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ less processos.txt
 
  PID TTY      STAT  TIME COMMAND
 
    1 ?        Ss    0:03 /sbin/init
 
    2 ?        S<    0:00 [kthreadd]
 
    3 ?        S<    0:00 [migration/0]
 
    4 ?        S<    0:00 [ksoftirqd/0]
 
    5 ?        S<    0:00 [watchdog/0]
 
    6 ?        S<    0:00 [migration/1]
 
    7 ?        S<    0:00 [ksoftirqd/1]
 
    8 ?        S<    0:00 [watchdog/1]
 
    9 ?        S<    0:00 [events/0]
 
  10 ?        S<    0:00 [events/1]
 
  11 ?        S<    0:00 [khelper]
 
  12 ?        S<    0:00 [kstop/0]
 
  13 ?        S<    0:00 [kstop/1]
 
  14 ?        S<    0:00 [kintegrityd/0]
 
  15 ?        S<    0:00 [kintegrityd/1]
 
  16 ?        S<    0:00 [kblockd/0]
 
  17 ?        S<    0:00 [kblockd/1]
 
  18 ?        S<    0:00 [kacpid]
 
  19 ?        S<    0:00 [kacpi_notify]
 
  20 ?        S<    0:00 [cqueue]
 
  21 ?        S<    0:00 [ata/0]
 
  22 ?        S<    0:00 [ata/1]
 
processos.txt
 
 
</syntaxhighlight>
 
 
Como se pode ver, o texto que apareceria na tela foi guardado em ''processos.txt''. Experimente executar novamente o comando ''ps ax > processos.txt'' e veja o resultado. O que aconteceu com o arquivo ''processos.txt'' ?
 
 
Quando se deseja redirecionar a saída de um processo para um arquivo, porém preservando o conteúdo original desse arquivo, deve-se executar o comando da seguinte forma:
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ ps ax >> processos.txt
 
aluno@D1:~$
 
</syntaxhighlight>
 
 
... quer dizer, em vez de usar '''>''' usa-se '''>>'''.
 
 
==== Exercícios ====
 
 
# Concatene vários arquivos de texto, e usando redirecionamento de saída padrão grave o resultado em um novo arquivo. ''Dica:'' para concatenar use o utilitário '''cat'''.
 
# Execute o comando '''ps''' ''> ps.txt''. Veja o conteúdo do arquivo resultante ''ps.txt''. Execute novamente '''ps''' ''> ps.txt'', e veja como ficou o arquivo ''ps.txt''. O que você pode concluir quanto ao redirecionamento de saída para um arquivo já existente ?
 
# Repita o procedimento do ítem 2, porém executando primeiro '''ps''' ''> ps.txt'' e depois '''ps''' ''>> ps.txt''. Qual foi a diferença ?
 
# O programa '''sleep''' impõe uma pausa de um certo número de segundos. Por exemplo, ''sleep 1'' faz uma pausa de 1 segundo, e ''sleep 5'' faz uma pausa de 5 segundos. Como você poderia usá-lo para gravar em um arquivo três listagens de processos no sistema com intervalos de 2 segundos ?
 
# '''Desafio:''' Usando os [[PJI-2015-1#Alguns_utilit.C3.A1rios_de_uso_comum|utilitários de uso comum]], e explorando o redirecionamento de saída padrão, mostre que usuários estão executando processos no seu computador. Cada usuário deve ser mostrado uma única vez.
 
 
= 10/12: Projeto 2: entrada e saída padrão e ''daemons'' =
 
 
== Entrada e saída padrão (continuação) ==
 
 
Assim como pode-se redirecionar a saída padrao, é possível redirecionar a entrada padrão. Hoje será estudado como funciona esse tipo de redirecionamento e, por fim, como unir unir saída e entrada padrão de dois ou mais processos para que eles se comuniquem sem arquivos intermediários.
 
 
[[imagem:Sop-redir.png|800px]]
 
 
=== Redirecionamento de entrada padrão ===
 
 
Normalmente a entrada padrão corresponde ao teclado do terminal, mas pode ser redirecionada para outro arquivo ou dispositivo. No exemplo abaixo, usa-se o programa '''wc''' para contar as linhas, palavras e caracteres contidos no arquivo ''processos.txt'':
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ ps ax > processos.txt
 
aluno@D1:~$ wc < processos.txt
 
137  810 7807 processos.txt
 
aluno@D1:~$
 
</syntaxhighlight>
 
 
No exemplo acima, gravou-se em ''processos.txt'' o resultado do comando '''ps ax''' , e depois usou-se '''wc'' para contar linhas, palavras e caracteres desse arquivo. O efeito combinado é a contagem de quantos processos existem no sistema nesse momento (representado pelo número de linhas contidas em ''processos.txt'').
 
 
Ao contrário do caso da saída padrão, não é tão comum se usar redirecionamento de entrada padrão. No entanto há um recurso adicional provido pelo sistema operacional que explora a combinação de ambas, e que possibilita combinar as funcionalidades de diferentes programas.
 
 
=== Pipes ===
 
 
Em sistemas operacionais Unix, é possível conectar a saída padrão de um processo à entrada padrão de outro processo, e a isto se chama ''pipe'' (que pode ser traduzido como ''duto'' ou ''tubo''). Com isto, os dados de saída de um processo serão os dados de entrada de outro processo, o que pode ser explorado para realizar diferentes tarefas. Por exemplo, retomando a contagem de processos vista na seção anterior:
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ ps ax | wc
 
137  810 7807
 
aluno@D1:~$
 
</syntaxhighlight>
 
 
O símbolo de ''pipe'' é a barra vertical '''|'''. Ao se executarem os comandos acima unidos pelo ''pipe'', a listagem de processos gerada pelo '''ps ax''' é automaticamente enviada para a entrada padrão do comando '''wc'''. O resultado é a contagem de processos existentes no sistema.
 
 
Podem-se ligar mais de dois processos usando ''pipes''. Assim, cria-se um encadeamento de processos, em que a saída padrão de um processo alimenta a entrada padrão do próximo processo. Por exemplo, para se contarem os processos do usuário aluno:
 
 
<syntaxhighlight lang=bash>
 
aluno@D1:~$ ps aux | grep aluno | wc
 
    47    568    5195
 
aluno@D1:~$
 
</syntaxhighlight>
 
 
==== Exercícios ====
 
 
* [[PJI-2015-1#Alguns_utilit.C3.A1rios_de_uso_comum|utilitários de uso comum]]
 
 
 
# Conte quantos arquivos e diretórios existem dentro de um subdiretório qualquer (''dica: lembre do [[PJI-2015-2#Procurando_arquivos|find]]'').
 
# Liste um subdiretório de forma a mostrar somente os arquivos  nele contidos (não use o ''find'' desta vez ...).
 
# Conte quantos processos existem no sistema.
 
# Conte quantos processos do usuário ''aluno'' existem no sistema.
 
# Conte quantos processos que não são do usuário ''aluno'' existem no sistema.
 
# Mostre os ''N'' maiores arquivos ou subdiretórios (com respeito ao espaço em disco utilizado) existentes em um determinado subdiretório.
 
# Mostre exatamente a 3a linha do arquivo ''/etc/hosts''. Dica: veja os utilitários ''head'' e ''tail''.
 
# Mostre que usuários utilizaram o sistema recentemente (um usuário por linha). ''Dica:'' veja o programa [http://manpages.ubuntu.com/manpages/trusty/man1/last.1.html last].
 
# Conte quantas vezes cada usuário entrou no sistema recentemente. ''Dica:'' além do [http://manpages.ubuntu.com/manpages/trusty/man1/last.1.html last], dê uma olhada no [http://manpages.ubuntu.com/manpages/trusty/man1/uniq.1.html uniq]
 
# '''Desafio:''' mostre os ''logs'' (registros de atividades) ocorridos entre 19:30 e 19:59 em seu computador. Esses logs ficam armazenados no arquivo ''/var/log/syslog'', sendo que cada linha desse arquivo corresponde a um registro de atividade.
 
 
= 11/12: Projeto 2: conhecendo os daemons; instalando software e ... configurando a rede =
 
 
== Daemons ==
 
 
* [http://www.linfo.org/daemon.html Definição de ''daemon'']
 
 
[[imagem:Pji-OriginalBSDDaemon_300.jpg]]
 
 
 
Em um computador com Linux (ou qualquer outro tipo de Unix, tal como o FreeBSD), diversos eventos precisam ser tratados pelo sistema operacional. Um evento é algo que acontece, tal como uma mensagem que chega da rede, uma tecla pressionada no teclado, uma movimentação do mouse, uma ação agendada para um instante específico. Como a variedade de eventos é grande, existem programas especiais responsáveis por tratá-los. No mundo do Unix e similares, esses programas são chamados de '''daemons'''. A origem dessa denominação nada tem a ver com demônio, e sim com uma [http://pt.wikipedia.org/wiki/Dem%C3%B4nio_de_Maxwell alegoria do físico Maxwell]:
 
 
<syntaxhighlight lang=text>
 
A palavra daemon foi primeiro usada em um contexto computacional no pioneiro
 
Projeto MAC (que mais tarde se tornou o Laboratório para Ciência da
 
Computação do MIT) usando o IBM 7094 em 1963. Seu uso foi inspirado pelo
 
demônio de Maxwell da Física e Termodinâmica, que seria um agente imaginário
 
que ajudaria a ordenar moléculas de diferentes velocidades e trabalhava
 
incansavelmente em segundo plano. O termo foi então usado para descrever
 
processos em segundo plano que trabalhavam incansavelmente para realizar
 
tarefas rotineiras do sistema. O primeiro programa daemon foi criado para
 
realizar backups automáticos em fita. Após o termo ser adotado para
 
uso computacional, ele foi racionalizado como um acrônimo de Disk And
 
Execution MONitor.
 
</syntaxhighlight>
 
''Trecho extraído e traduzido do texto [http://www.linfo.org/daemon.html '''Daemon Definition''']''
 
 
Mas afinal quais são os ''daemons'' que rodam em seu computador, e o que eles fazem ?
 
 
 
[[imagem:Pji-Daemon-cartoon.gif]]
 
 
 
Para identificar os ''daemons'', faça uma listagem dos processos. O seu resultado deve ser parecido com este: <syntaxhighlight lang=bash>
 
msobral@curl2:~$ ps aux
 
USER      PID %CPU %MEM    VSZ  RSS TTY      STAT START  TIME COMMAND
 
root        1  0.0  0.0  26672  2472 ?        Ss  13:34  0:03 /sbin/init
 
root      359  0.0  0.0  17236  636 ?        S    13:34  0:00 upstart-udev-bridge --daemon
 
root      392  0.0  0.0  21956  1772 ?        Ss  13:34  0:00 /sbin/udevd --daemon
 
102        917  0.0  0.0  27196  2440 ?        Ss  13:34  0:00 dbus-daemon --system --fork --activation=upstart
 
root      929  0.0  0.0  21192  1696 ?        Ss  13:34  0:00 /usr/sbin/bluetoothd
 
syslog    935  0.0  0.0 249476  1468 ?        Sl  13:34  0:00 rsyslogd -c5
 
avahi      942  0.0  0.0  34404  1772 ?        S    13:34  0:00 avahi-daemon: running [curl2.local]
 
avahi      943  0.0  0.0  34280  480 ?        S    13:34  0:00 avahi-daemon: chroot helper
 
root      955  0.0  0.0 104056  3812 ?        Ss  13:34  0:00 /usr/sbin/cupsd -F
 
root      1016  0.0  0.0  7268  604 ?        Ss  13:35  0:00 dhclient3 -e IF_METRIC=100 -pf /var/run/dhclient
 
root      1184  0.0  0.0  20004  976 tty4    Ss+  13:35  0:00 /sbin/getty -8 38400 tty4
 
root      1191  0.0  0.0  20004  984 tty5    Ss+  13:35  0:00 /sbin/getty -8 38400 tty5
 
bind      1205  0.0  0.3 237744 13452 ?        Ssl  13:35  0:00 /usr/sbin/named -u bind
 
root      1206  0.0  0.0  20004  984 tty2    Ss+  13:35  0:00 /sbin/getty -8 38400 tty2
 
root      1207  0.0  0.0  20004  980 tty3    Ss+  13:35  0:00 /sbin/getty -8 38400 tty3
 
root      1210  0.0  0.0  20004  984 tty6    Ss+  13:35  0:00 /sbin/getty -8 38400 tty6
 
root      1237  0.0  0.0  4464  828 ?        Ss  13:35  0:00 acpid -c /etc/acpi/events -s /var/run/acpid.sock
 
root      1239  0.0  0.0  19116  1016 ?        Ss  13:35  0:00 cron
 
daemon    1240  0.0  0.0  16912  372 ?        Ss  13:35  0:00 atd
 
root      1241  0.0  0.0  15984  688 ?        Ss  13:35  0:01 /usr/sbin/irqbalance
 
root      1243  0.0  0.0 262452  3388 ?        Ssl  13:35  0:00 lightdm
 
root      1308  3.1  1.9 196692 75948 tty7    Ss+  13:35  8:05 /usr/bin/X :0 -auth /var/run/lightdm/root/:0 -no
 
root      1332  0.0  0.0 969688  2284 ?        Ssl  13:35  0:01 /usr/sbin/nscd
 
</syntaxhighlight>
 
 
Veja que muitos processos não foram executados diretamente por você ... de fato, a maioria deles parece ter sido iniciado como mágica. Uma das coisas que acontecem no boot do sistema operacional é executar esses ''daemons'', que são necessários para que todo o sistema seja usável pelos usuários.
 
 
=== Atividade ===
 
 
# Para ter uma ideia do que os ''daemons'' fazem, escolha 5 deles e descreva o seu papel no sistema. Use o manual online (comando '''man'''), ou pesquise na Internet.
 
# Experimente matar alguns daemons e veja o que acontece. Os professores também irão sugerir alguns ''daemons'' cujo término trará resultados interessantes ...
 
# Um ''daemon'' importante se chama ''sshd'', e oferece o serviço [http://pt.wikipedia.org/wiki/OpenSSH SSH], que possibilita o acesso remoto a um terminal de um computador. Ative esse ''daemon'' em seu computador, e use-o para acessá-lo remotamente.
 
 
== Instalação de software ==
 
 
A instalação de software pode ser feita de diferentes maneiras:
 
* ''A partir do software em formato de código-fonte:'' envolve transferir o código-fonte do seu repositório, e então compilá-lo. Isso requer um maior conhecimento técnico, e é uma habilidade esperada para um Técnico que atue na área de Telecomunicações.
 
* ''A partir do software já preparado (compilado):'' essa forma é mais simples, pois basicamente implica obter o software compilado e copiá-lo para dentro do seu sistema. É também a prática mais comum, por ser mais rápida, fácil e menos trabalhosa. Todas as distribuições Linux (e também o FreeBSD) provêem alguma forma de instalar softwares dessa maneira. Esses sistemas criam o conceito de '''pacote de software''', que é um arquivo especial contendo todos os arquivos do software a ser instalado, e todas as informações necessárias para que a instalação tenha sucesso (versão, dependências, e outras).
 
 
No escopo desta disciplina de Projeto Integrador, são usados '''pacotes de software'''. Mas nada impede que se demonstre como seria realizar uma instalação a partir do código-fonte, caso exista a curiosidade.
 
 
No Ubuntu Linux (e também nas distribuições originadas no Debian), o sistema de pacotes de software se chama ''dpkg'' (Debian Package). Existem diferentes formas de instalar e remover sofware, dentre elas:
 
# '''Diretamente a partir dos arquivos de pacote de software:''' esses arquivos têm extensão ''.deb'', e devem ser instalados por meio do programa [http://manpages.ubuntu.com/manpages/trusty/man1/dpkg.1.html dpkg]. Os arquivos ''.deb'' devem ser obtidos manualmente pelo usuário, podendo ser copiados de DVDs do sistema, ou obtidos de servidores na rede. Para removê-los, deve-se usar também o ''dpkg''.
 
# '''Obtendo automaticamente pacotes de software de repositórios:''' essa forma de administrar os pacotes é muito mais fácil, pois os pacotes de software são obtidos de servidores de pacotes na rede. Ela se baseia num sistema de gerenciamento de pacotes chamado de APT, e pode ser realizada por meio dos aplicativos [http://manpages.ubuntu.com/manpages/trusty/en/man8/apt-get.8.html apt-get] ou [http://manpages.ubuntu.com/manpages/precise/en/man8/aptitude.8.html aptitude] (este é ainda mais fácil). Existem também versões gráficas para esses gerenciadores de pacotes.
 
 
=== Instalação manual com ''dpkg'' ===
 
 
Para instalar pacotes de software manualmente, primeiro devem-se obter os respectivos arquivos de instalação. Cada pacote de software está contido em um arquivo com extensão ''.deb''. Esses arquivos podem ser obtidos dos CD e DVD de instalação, ou de repositórios na Internet (ex: [http://ubuntu.c3sl.ufpr.br/ubuntu/ um repositório do Ubuntu no Brasil]).
 
 
Cada arquivo de instalação deve ser instalado da seguinte forma:
 
 
<syntaxhighlight lang=bash>
 
dpkg -i nome_do_pacote.deb
 
</syntaxhighlight>
 
 
Se o pacote de software não puder ser instalado, uma mensagem de erro é apresentada. Uma causa para esse problema é existirem dependências em relação a outros pacotes de software, os quais devem então ser instalados previamente.
 
 
 
A remoção de um pacote de software pode ser feita assim:
 
 
<syntaxhighlight lang=bash>
 
dpkg -r nome_do_pacote
 
</syntaxhighlight>
 
 
Se o pacote a ser removido for dependência para outros pacotes instalados, a remoção será abortada.
 
 
 
A listagem de todos os pacotes instalados pode ser obtida com este comando:
 
 
<syntaxhighlight lang=bash>
 
dpkg-query -l
 
</syntaxhighlight>
 
 
A listagem dos arquivos instalados por um pacote é mostrada com este outro comando:
 
 
<syntaxhighlight lang=bash>
 
dpkg-query -L nome_do_pacote
 
</syntaxhighlight>
 
 
 
Informações detalhadas sobre um pacote podem ser mostradas assim:
 
 
<syntaxhighlight lang=bash>
 
dpkg-query -p nome_do_pacote
 
</syntaxhighlight>
 
 
=== Obtenção automática de software ===
 
 
Os pacotes de softwares dos sistemas operacionais Ubuntu e Debian são organizados e disponibilizados em repositórios, que são servidores na Internet onde há cópias dos arquivos de instalação desses pacotes. Os repositórios são configurados durante a própria instalação do sistema, ficando registrados no arquivo [http://manpages.ubuntu.com/manpages/trusty/man5/sources.list.5.html /etc/apt/sources.list]. Esse arquivo pode ser modificado para incluir ou remover repositórios, quando necessário.
 
 
 
Um resumo dos comandos que podem ser usados com [http://manpages.ubuntu.com/manpages/trusty/en/man8/apt-get.8.html apt-get]:
 
* '''apt-get update''': atualiza o catálogo de pacotes de software conhecidos. Isso implica consultar os repositórios configurados e transferir as listas de pacotes lá existentes. Isso é importante para ter acesso a versões atualizadas dos pacotes de software.
 
* '''apt-get install nome_do_pacote''': instala o pacote de software chamado ''nome_do_pacote''. Se houver dependências de outros pacotes, eles também serão instalados.
 
* '''apt-get remove nome_do_pacote''': remove o pacote de software chamado ''nome_do_pacote''. se outros pacotes dependerem desse pacote, eles também serão removidos.
 
* '''apt-get clean''': remove as cópias dos arquivos de pacotes de software transferidos e não mais necessários.
 
* '''apt-get upgrade''': atualiza todos os pacotes de software para suas versões mais recentes, caso existam.
 
 
 
Um resumo dos comandos que podem ser usados com [http://manpages.ubuntu.com/manpages/trusty/en/man8/aptitude.8.html aptitude]:
 
* '''aptitude update''': mesmo que ''apt-get update''
 
* '''aptitude install nome_do_pacote''': mesmo que ''apt-get install''
 
* '''aptitude remove nome_do_pacote''': mesmo que ''apt-get remove''
 
* '''aptitude search nome''': lista todos os pacotes de software conhecidos cujos nomes contenham ''nome''
 
 
=== Atividade ===
 
 
''Execute os passos  seguintes tanto com instalação manual quanto automática de software.''
 
# Instale estes softwares:
 
#* mplayer
 
#* mencoder
 
#* ghb
 
# Obtenha a descrição de alguns softwares instalados:
 
#* bash
 
#* Xorg
 
#* ... outros a seu critério
 
#* Liste todos os softwares instalados.
 
# Remova os softwares instalados nos passos anteriores
 
# Reveja o [http://kodi.wiki/view/HOW-TO:Install_Kodi_for_Linux procedimento de instalação do Kodi], interpretando-o de acordo com seus recentes conhecimentos sobre instalação de software.
 
# Existe um projeto de software chamado ownCloud que, entre outras coisas, implementa um serviço parecido com Dropbox. Veja [https://software.opensuse.org/download/package?project=isv:ownCloud:desktop&package=owncloud-client este guia de instalação do ownCloud], e note que isso implica adicionar um repositório ao seu sistema operacional. Experimente seguir as instruções de instalação ali contidas.
 
# Descubra como se podem instalar softwares em modo gráfico.
 
 
== Configuração de rede ==
 
 
Na [[PJI-2015-2#Configura.C3.A7.C3.A3o_da_rede_no_centro_de_midia|aula de 13/11]] apresentaram-se princípios para a configuração de rede do computador. A título de recordação, identificaram-se três informações essenciais para que um computador possa acessar a rede (Internet):
 
# O endereço IP e máscara de rede do computador
 
# A rota default para acesso a Internet (ou o gateway)
 
# O endereço IP do servidor DNS a ser utilizado
 
 
Nas atividades realizadas naquela aula, essas informações foram devidamente descritas e então manualmente configuradas no computador. No entanto, da forma que isso foi feito, sempre que o computador for reiniciado deve-se refazer toda a configuração de rede. Isso não é conveniente em uma situação real.
 
 
Hoje será visto como tornar permanente a configuração de rede. Isso depende do [http://www.linfo.org/flavors.html ''sabor'' do sistema operacional Unix], o que vale também para os diferentes Linux (ex: Ubuntu, Debian, OpenSuse, Fedora, RedHat, ArchLinux, Slackware, ...). Para simplificar vamos nos concentrar nas duas variações de sistemas Linux que usamos em aula: Ubuntu e Debian.
 
 
== Configuração de rede permanente ==
 
 
Ambos sistemas operacionais Ubuntu e Debian possibilitam configurar as interfaces de rede do computador de duas formas:
 
# '''Arquivo [http://manpages.ubuntu.com/manpages/trusty/en/man5/interfaces.5.html /etc/network/interfaces]''': as configurações de rede são escritas em um arquivo de texto, seguindo uma sintaxe predefinida.
 
# '''Gerenciador de rede ([http://manpages.ubuntu.com/manpages/trusty/man8/NetworkManager.8.html NetworkManager])''': as configurações de rede são criadas por meio de um aplicativo gráfico, e para em seguida serem aplicadas por um ''daemon'' específico. O aplicativo gráfico é acessado por meio da barra de status do ambiente gráfico, no canto superior direito.
 
 
=== Arquivo /etc/network/interfaces ===
 
 
O arquivo ''/etc/network/interfaces'' contém declarações para configurar as interfaces de rede. Um exemplo de configuração básica contida nesse arquivo pode ser vista a seguir:
 
 
<syntaxhighlight lang=text>
 
auto lo eth0
 
iface lo inet loopback
 
iface eth0 inet dhcp
 
</syntaxhighlight>
 
 
Esse exemplo pode ser interpretado assim:
 
* ''Linha 1'': declara que as interfaces ''lo'' e ''eth0'' devem ser ativadas automaticamente no boot. Se uma interface não aparecer em uma declaração como esta, então ela não será ativada. OBS: interface ativadas desta forma NÃO são controladas pelo ''NetworkManager''.
 
* ''Linha 2'': configura a interface ''lo'' como sendo do tiupo ''loopback''. Essa é uma interface especial criada puramente em software (uma interface de rede virtual), usada para comunicação entre processos de um mesmo computador.
 
* ''Linha 3'': configura a interface ''eth0'' de forma dinâmica usando [[GER-2010-1#DHCP|DHCP]]. A configuração de rede é solicitada usando a própria rede. Ness ecaso, deve existir algum equipamento ou computador nessa rede que seja um servidor DHCP, capaz de responder com uma mensagem contendo a configuração de rede a ser utilizada.
 
 
 
O exemplo anterior é bastante simplificado, uma vez que a configuração de rede de fato é obtida dinamicamente com DHCP. Isso pode ser suficiente para computadores usados somente para acesso a Internet, mas não para computadores que sejam servidores. Nesse caso, é melhor definir uma configuração de rede estática, como mostrado a seguir:
 
 
<syntaxhighlight lang=text>
 
auto lo eth0
 
iface lo inet loopback
 
iface eth0 inet static
 
  address 172.18.80.251
 
  netmask 255.255.128.0
 
  gateway 172.18.0.254
 
  dns-nameservers 200.135.37.65 200.135.37.66
 
</syntaxhighlight>
 
 
 
A diferença em relação ao caso anterior está na declaração da interface ''eth0''. Ao invés de configurá-la com ''DHCP'', declararam-se todas as informações de rede. Assim, essa interface sempre será ativada com essas informações configuradas. No exemplo apresentado, as configurações de rede são:
 
* ''address 172.18.80.251'': endereço IP da interface
 
* ''netmask 255.255.128.0'': máscara de rede
 
* ''gateway 172.18.0.254'': endereço do gateway (ou roteador ''default'')
 
* ''dns-nameservers 200.135.37.65 200.135.37.66'': servidores DNS a serem utilizados (podem-se especificar um ou mais endereços IP)
 
 
O [http://manpages.ubuntu.com/manpages/trusty/en/man5/interfaces.5.html manual do arquivo /etc/network/interfaces] apresenta muitos outros detalhes sobre possíveis configurações de rede.
 
 
== Atividade ==
 
 
# Nos quatro passos a seguir, sempre visualize a configuração de rede obtida e teste a comunicação com a Internet.
 
# Por meio do ''NetworkManager'' crie as configurações de rede de seu computador de forma que se use DHCP.
 
# Ainda com o NetworkManager, crie uma configuração de rede estática. Use o IP 192.168.100+''número de sua equipe'', máscara de rede 255.255.255.0, roteador default 192.168.1.1 e servidor DNS 200.135.37.65.
 
# Refaça os dois passos anteriores, porém usando o arquivo ''/etc/network/interfaces''.
 
# Em cada caso, reinicie o computador, e veja se a interface continua configurada.
 
# No caso da configuração com arquivo ''/etc/network/interfaces'', experimente ativar e desativar interfaces de rede (veja os manuais desses comandos):
 
#* O comando ''ifdown'' desativa uma interface
 
#* O comando ''ifup'' ativa uma interface
 
# No caso do ''NetworkManager'', como se podem ativar e desativar interfaces ?
 
 
= 17/12: Projeto 2: rotas em uma rede de muitas redes ! =
 
 
Como visto na aula anterior, cada dispositivo em uma rede precisa ter um endereço IP para que possa se comunicar com outros dispositivos. Porém isso não é suficiente: os dispositivos devem saber que '''direção''' tomar para chegar até cada outro dispositivo. Se o dispositivo de destino estiver na mesma rede, então basta transmitir o pacote a ele diretamente. Mas e se ele estiver em outra rede ? Por exemplo, e se um computador no laboratório de Redes 1 quiser se comunicar com outro que está na reitoria do IFSC ? Como esse pacote deve ser transmitido nesse caso?
 
 
 
[[imagem:Pji-projeto2-rotas.png|500px]]
 
 
 
Na figura acima, a rede externa é representada como uma nuvem. Isso significa que sua estrutura interna é desconhecida, ou não é relevante mostrá-la. No caso da Internet, na verdade seria impossível apresentar toda sua estrutura, pois essa rede hoje em dia é gigantesca, além de estar sempre em mutação. Mas ao menos um esboço da rede do Ifsc pode ser apresentado, como se pode ver a seguir. AO visualizá-la, deve-se novamente imaginar como é possível encaminhar pacotes através dela, de forma que cheguem a seus destinos.
 
 
 
[[imagem:Ifsc.png|600px]]
 
<br>''Uma visão geral da rede do Ifsc (e bem simplificada !)''
 
 
 
Em primeiro lugar, deve-se imaginar como a Internet está implantada (ao menos do ponto de vista das subredes). A palavra ''internet'' significa ''rede composta por redes'', e, no caso da ''Internet'', cada uma das redes que a constitui é chamada de [http://pt.wikipedia.org/wiki/Sub-rede ''subrede'']. Se alguém pudesse ver o mapa da Internet, pareceria uma grande malha, com milhares de fios (enlaces) se entrelaçando. Nas junções desses fios estão equipamentos que '''roteiam''' (''direcionam'') pacotes a seus destinos. Os equipamentos finais, que são usados por pessoas para rodas os aplicativos de rede, estão na borda de toda essa malha ... nas pontas dos fios. No fim, isso parece um grande mapa, e como tal ele pode ser percorrido por um ou mais caminhos para se ir de um ponto a outro.
 
 
 
{| border=0
 
!''Um mapa da Internet (bem abstrato ...)''
 
!Rede Ipê: a Rede Nacional de Pesquisa que originou a Internet no Brasil
 
|-
 
|[[imagem:Internet-map.png|600px]] || [[imagem:Rede-ipe-2014.jpg|600px]]
 
|}
 
 
 
Essa analogia do mapa pode ser experimentada usando o [http://maps.google.com Google Maps]. Experimente traçar caminhos entre o IFSC-SJ e vários destinos (mesmo em outras cidades), e visualize como ele descobre o caminho. Observe também que critério é usado para escolher o caminho ... pois é normal que exista mais de uma opção.
 
 
Mas o que isso tem a ver com redes ? Muita coisa: a forma com que o Google Maps descobre caminhos se baseia nos mesmos conceitos usados para descobrir '''rotas''' entre dispositivos na Internet. E voltando a redes de computadores, também é possível descobrir que caminho os pacotes percorrem para ir de um ponto a outro na Internet.
 
 
'''Experimento:''': use o programa [http://manpages.ubuntu.com/manpages/hardy/man8/traceroute-nanog.genuine.8.html traceroute] para descobrir os caminhos percorridos por seus pacotes. Teste-o com vários possíveis destinos:
 
* www.ufsc.br
 
* www.unicamp.br
 
* www.brasil.gov.br
 
* www.nasa.gov
 
* english.pravda.ru
 
* www.china.org.cn
 
* finland.fi
 
 
O que significam as informações mostradas por esse programa ?
 
 
 
Estes outros aplicativos descobrem rotas e as mostram sobre um mapa mundial.
 
* [http://traceroute.monitis.com/ Visual Trace Route Tool (EUA)]
 
* [http://www.yougetsignal.com/tools/visual-tracert/ Visual Traceroute (EUA)]
 
* [http://en.dnstools.ch/visual-traceroute.html Traceroute on a map (Alemanha)]
 
 
== Rotas no Linux ==
 
 
Cada computador ligado a Internet possui uma '''tabela de rotas'''. É por meio de tal tabela que ele sabe como transmitir os pacotes para cada destino. Em seu computador, você pode visualizar essa tabela da seguinte forma:
 
 
<syntaxhighlight lang=bash>
 
# Isto funciona em qualquer *nix que se preze ...
 
netstat -rn
 
</syntaxhighlight>
 
 
 
Ao se configurar uma interface de rede, cria-se uma rota automática para a subrede diretamente acessível via aquela interface. Isto se chama '''''roteamento mínimo'''''. Por exemplo, se uma interface de rede foi configurada com o endereço IP 192.168.10.1/16, sua tabela de rotas pode se apresentar assim:
 
 
<syntaxhighlight lang=bash>
 
aluno@M1:~> ifconfig eth1 192.168.10.1 netmask 255.255.0.0
 
aluno@M1::~> netstat -rn
 
Kernel IP routing table
 
Destination    Gateway        Genmask        Flags  MSS Window  irtt Iface
 
192.168.0.0    0.0.0.0        255.255.0.0    U        0 0          0 eth1
 
127.0.0.0      0.0.0.0        255.0.0.0      U        0 0          0 lo
 
</syntaxhighlight>
 
 
 
Usualmente, é suficiente definir uma única rota adicional para um computador, chamada de '''rota default''' (ou ''rota padrão''). Essa rota tem o seguinte significado: se o destino não estiver em minha própria subrede, e nenhuma outra rota específica existir para a subrede onde se encontra, então repasse-o para o roteador indicado. Em um computador Linux isso pode ser feito assim:
 
 
<syntaxhighlight lang=bash>
 
# adiciona a rota default, que passa pelo roteador 192.168.10.100
 
# No FreeBSD o comando é um pouco diferente ...
 
route add default gw 192.168.10.100
 
</syntaxhighlight>
 
 
 
Outra forma de adicionar essa rota é:
 
 
<syntaxhighlight lang=bash>
 
# este comando tem o mesmo efeito que o anterior ...
 
route add -net 0.0.0.0/0 gw 192.168.10.100
 
</syntaxhighlight>
 
 
Isso não parece complicado, e à primeira vista realmente não é :-) Ao se instalar um novo equipamento em uma rede, seja um computador, tablet, ponto de acesso ou smart TV, basta configurá-lo com a rota ''default'' para que possa se comunicar com a Internet. Na verdade, nem isso normalmente é necessário, pois esses equipamentos são capazes de se autoconfigurarem como mágica (mais tarde veremos como !). Porém existe uma matemática interessante por trás de como essas rotas funcionam, e vale dar uma olhada.
 
 
=== Rotas, prefixos de rede e máscaras ===
 
 
Uma rota serve para informar como se chega a um determinado destino. Um destino pode ser um único endereço IP, ou uma subrede (que contém um conjunto de endereços IP). Para que um pacote IP chegue a um destino, deve-se transmiti-lo para o próximo roteador em direção a esse destino. Esse próximo roteador também deve conhecer uma rota para tal destino, repetindo o mesmo processo (reveja o experimento com '''traceroute''). Ao menos duas informações compõem cada rota:
 
* '''O próximo roteador, expressado por um endereço IP:''' o endereço IP do próximo roteador (também chamado de ''gateway'', que significa ''portal'' em inglês), o qual deve pertencer à mesma subrede do equipamento que o especifica em uma rota.
 
* '''O destino, que é expressado como uma subrede:''' Uma subrede é representada por um ''prefixo de rede'' e uma ''máscara''. O prefixo são os ''N'' bits mais significativos comuns a todos os endereços IP contidos em uma subrede (lembre que um endereço IP tem 32 bits). A máscara informa quantos bits tem o prefixo. A combinação de prefixo de rede e máscara funciona da seguinte forma:
 
 
Imagine que exista uma subrede contendo os endereços de 192.168.2.0 até 192.168.2.255. Se representarmos esses endereços em binário, podemos ver que os 24 bits mais significativos são os mesmos para todos os endereços:
 
 
 
[[imagem:Pji-prefixo1.png|400px]]
 
 
 
A máscara de rede tem a forma de um endereço IP, porém com bits 1 na parte correspondente ao prefixo, e 0 no resto. Assim, para o exemplo acima a máscara de rede é ''255.255.255.0''. Outra forma de representar a máscara é simplesmente informar o tamanho em bits do prefixo, e no exemplo a máscara seria ''24''. Juntando o prefixo e a máscara, a subrede pode ser representada de uma destas duas formas:
 
* '''192.168.2.0/255.255.255.0'''
 
* '''192.168.2.0/24'''
 
 
 
Agora imagine que o prefixo tenha 28 bits, como mostrado nesta figura:
 
 
 
[[imagem:Pji-prefixo2.png|400px]]
 
 
 
Por ter um prefixo mais longo, o tamanho dessa subrede é menor. Isso significa que ela contém menos endereços IP, tanto que o primeiro endereço é ''192.168.2.0'' e o último é ''192.168.2.15''. Essa subrede poderia ser representada por:
 
* '''192.168.2.0/255.255.255.240'''
 
* '''192.168.2.0/28'''
 
 
 
Aproveitando esse exemplo, pode-se mostrar uma outra subrede que, apesar de não parecer, é diferente da anterior:
 
 
 
[[imagem:Pji-prefixo3.png|400px]]
 
 
 
Essa outra subrede contém endereços entre ''192.168.2.16'' e ''192.168.2.31''. Essa subrede poderia ser representada por:
 
* '''192.168.2.16/255.255.255.240'''
 
* '''192.168.2.16/28'''
 
 
=== Exercícios ===
 
 
Resolva estes exercícios sobre subredes, prefixos e máscaras.
 
 
# O tamanho de uma subrede é definido pela quantidade de endereços IP que ela contém. Quais os tamanhos de cada subrede mostrada nos exemplos da seção anterior ?
 
# Sejam as subredes A: ''192.168.2.48/28'', B: ''192.168.2.64/26'', C: ''192.168.2.192/27'', D: ''192.168.2.128/29'' e E: ''192.68.2.0/27''. Informe em qual dessas subredes se encontram estes endereços IP:
 
#* 192.168.2.126
 
#* 192.168.2.25
 
#* 192.168.2.62
 
#* 192.168.2.200
 
#* 192.168.2.100
 
#* 192.168.2.80
 
# Informe qual o tamanho de cada uma das subredes do exercício anterior.
 
# Informe quais o primeiro e último endereços IP de cada uma daquelas subredes.
 
# A subrede 192.168.2.0/24 foi subdividida em subredes de tamanho 32. Liste todas as subredes que são possíveis definir com essas características (informe prefixo e máscara).
 
# A subrede 192.168.2.0/24 foi subdividida em subredes com máscara 26. Liste todas as subredes que são possíveis definir com essas características (prefixo e máscara), informando também seus tamanhos.
 
# Uma subrede do câmpus é 172.18.0/18. Calcule seu tamanho, seu endereço inicial e final.
 
# Calcule o tamanho, endereço inicial e final da rede sem-fio do IFSC.
 
 
= 18/12: Projeto 2: experimentando usar rotas =
 
 
Hoje devemos continuar a configuração da rede IP iniciada semana passada. Isso será usado para:
 
* Verificar se Kodi está plenamente funcional em todos computadores.
 
* Verificar se Kodi compartilha midia em sua rede.
 
* Isolar os Kodi em suas redes
 
 
==Atividade==
 
 
Cada equipe deve imaginar que esteja usando uma subrede exclusiva. Para padronizar, as subredes devem ter esta numeração: ''192.168.1X.0/24'', sendo ''X'' o número da equipe. Com base nisso:
 
# Configure o computador da equipe para usar um endereço dessa subrede.
 
# Tente se comunicar com computadores de outras equipes ... é possível ? O que se pode concluir quanto a isso ? Note que todas equipes usam a mesma rede física.
 
# Defina a ''rota padrão'' do seu computador, a qual deve apontar o último endereço IP válido da sua subrede (esse é o computador do professor).
 
# Repita o teste de comunicação com outras equipes. O resultado foi diferente ?
 
# Use o ''traceroute'' para entender como seu computador se comunica com computadores de outras equipes, e com computadores fora do Ifsc.
 
# Utilizando [[#Atividade_3|mais uma vez o programa Wireshark]], monitore o tráfego da rede para entender o uso de endereços locais e remotos na transmissão de dados.
 
 
 
== O que todo host deve possuir ==
 
 
Com o que se fez até o momento, pode-se concluir que todo host (computador, tablet, smartphone, ..., qualquer dispositivo que rode aplicações da Internet) precisa de:
 
* '''Endereço IP e máscara de rede''': um host precisa de um endereço para que posa se comunicar com outros hosts. A máscara de rede informa o tamanho da subrede IP em que ele se encontra.
 
* '''Rota default (padrão)''': para se comunicar com hosts de outras subredes, é preciso enviar os pacotes para um roteador que saiba encaminhá-los a seus destinos. O roteador ''default'' (ou ''padrão'') é um roteador para quem se destinam todos esses pacotes. Tecnicamente ele corresponde à rota para o destino ''0.0.0.0/0''.
 
* '''Endereço IP do servidor DNS''': usuários costumam endereçar hosts e servidores por seus nomes de domínio, e não por seus endereços IP. Isso é muito mais fácil de memorizar do que os endereços numéricos. Como explicado em aula, nomes de domínio são análogos a nomes de assinantes em um catálogo telefônico. No entanto, as aplicações precisam dos endereços IP para se comunicarem. O servidor DNS faz a tradução de nome de domínio para endereço IP, e é usado pelas aplicações transparentemente (isso é, você não percebe que isso ocorre). O endereço desse servidor deve ser configurado em cada host, para que se possam traduzir nomes de domínio.
 
 
Foi visto também que cada sistema operacional guarda essas informações em arquivos específicos. O endereço do servidor DNS fica no arquivo ''/etc/resolv.conf'', e isso é o mesmo para todos os sistemas operacionais usados em aula. As demais informações ficam em arquivos diferentes, dependendo do sistema operacional. Por exemplo, sistemas da família Debian (o que inclui Ubuntu) guardam isso em:
 
 
''/etc/network/interfaces''
 
 
= 04/02: Implantação das redes locais das equipes =
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/EW-7209APg-Manual_080919.pdf Manual do Ponto de acesso sem-fio Edimax EW-7209APG]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/tlwdr4300.pdf Manual do Roteador sem-fio TP-Link WDR 4300]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/tlwr941n.pdf Manual do Roteador sem-fio TP-Link WR 941ND]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/dlink-di-524.pdf Manual do Roteador sem-fio D-Link DI-524]
 
 
Cada equipe deve implantar sua própria rede local, composta pelo servidor de midia, um roteador e ponto de acesso sem-fio, e um ou mais dispositivos (hosts) adicionais. A rede portanto deve ficar parecida com o diagrama apresentado no início do projeto 2:
 
 
[[imagem:Pji1-projeto2.png|500px]]
 
 
 
Por questões de disponibilidade, usaremos um equipamento que combina as funções de ''roteador'' e ''ponto de acesso (AP)''. Usaremos também um ''switch'' para interligar o computador do centro de midia e esse roteador.
 
 
 
O cenário no laboratório deve ser o seguinte:
 
 
[[imagem:Proj2-20142-lan.png]]
 
 
== Equipamentos de interligação para pequenas redes locais (LAN) ==
 
 
Uma LAN serve para interconectar equipamentos (computadores, servidores, roteadores, ...) relativamente próximos entre si. As distâncias envolvidas são tipicamente de algumas dezenas de metros, podendo chegar em alguns casos a até poucas centenas de metros. Essas redes apresentam como características:
 
* '''altas taxas de transmissão:''' o usual é 1 Gbps (1 bilhão de bits por segundo, que equivalem a cerca de 125 milhões de bytes por segundo). A geração anterior das LANs Ethernet operava a 100 Mbps (100 milhões de bits por segundo, ou dez vezes mais lento que as LANs de 1 Gbps), e ainda se encontram dispositivos que operam nessa taxa de transmissão.
 
* '''baixo custo:''' as interfaces de rede dos equipamentos são baratas (algumas dezenas de R$), assim como os equipamentos de interconexão (switches) e cabos.
 
* '''alta qualidade de transmissão:''' essas redes são virtualmente isentas de erros de transmissão. Quando eles ocorrem, é sinal de má-instalação ou defeito em equipamentos.
 
 
Hoje em dia a tecnologia de rede usada para criar LANs se chama Ethernet (o nome oficial é [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/ieee/802.3/ IEEE 802.3], que é o padrão que a define).
 
 
LANs são muito difundidas. São usadas em redes domésticas, redes de pequenos escritórios, grandes redes corporativas, redes em escolas, e possivelmente outros ambientes. A rede do IFSC, que interliga os laboratórios e os servidores do câmpus, é composta de algumas LANs interconectadas. Em todos esses casos, a configuração usual das LANs envolve o uso de:
 
* '''dispositivos com interfaces de rede Ethernet''': dispositivos são computadores, roteadores, e demais equipamentos que se comunicam através da LAN.
 
* '''switches Ethernet para interligar os dispositivos''': [http://tele.sj.ifsc.edu.br/~msobral/pji/switch-dlink.png switches] funcionam como concentradores (na verdade, comutadores), onde todos os dispositivos são conectados por meio de cabos.
 
* '''cabos e conectores''': os cabos usados são do tipo par-trançado, porque dentro deles existem quatro pares trançados de fios. Para conectá-los se usam [http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Ethernet_RJ45_connector_p1160054.jpg/220px-Ethernet_RJ45_connector_p1160054.jpg conectores RJ-45]. Esses cabos devem ter comprimento máximo de 100m.
 
 
 
Para criar uma LAN, deve-se usar um switch com uma quantidade de portas igual ou maior que a quantidade de dispositivos a serem interligados. A figura abaixo mostra uma pequena LAN com um switch:
 
 
 
[[imagem:Pji1-Lan1.png]]
 
 
 
Em uma LAN, switches podem também ser interligados. Isso na prática aumenta a quantidade de dispositivos que podem existir na LAN, e também as distâncias entre eles (lembre que cada cabo tem um comprimento máximo da ordem de 100m):
 
 
[[imagem:Pji1-Lan2.png]]
 
 
 
Se a LAN for composta de apenas dois dispositivos, então um switch se torna desnecessário. Assim, os dispositivos podem ser conectados diretamente:
 
 
[[imagem:Pji1-Lan3.png]]
 
 
= 05/02: Projeto 2: a rede de cada equipe =
 
 
Dando continuidade à implantação da rede de cada equipe, hoje devem-se investigar:
 
* a configuração automática de rede dos hosts
 
* o uso de NAT no roteador
 
* o funcionamento básico de alguns equipamentos da rede
 
 
== Configuração automática de hosts ==
 
 
Na prática ninguém precisa se preocupar em configurar seus dispositivos com as informações de rede vistas na aula anterior. As pessoas acessam a rede e por mágica tudo isso é configurado automaticamente. Basta pensar no acesso à rede sem-fio do Ifsc, e mesmo nas redes de suas casas ou locais de trabalho, seja sem-fio ou cabeada. A configuração manual somente é necessária quando se instalam servidores ou outros equipamentos que formam a infraestrutura das redes. No caso geral, um serviço especial chamado de DHCP (''Dyamic Host Configuration Protocol - Protocolo de Configuração Dinâmica de Host'') provê a configuração automática.
 
 
 
[http://www.tcpipguide.com/free/t_TCPIPDynamicHostConfigurationProtocolDHCP.htm DHCP] (''Dynamic Host Configuration Protocol'') é um protocolo para obtenção automática de configuração de rede, usado por computadores que acessam fisicamente uma rede. Esses computadores são tipicamente máquinas de usuários, que podem usar a rede esporadicamente (ex: usuários com seus laptops, com acesso via rede cabeada ou sem-fio), ou mesmo computadores fixos da rede. O principal objetivo do DHCP é fornecer um endereço IP, a máscara de rede, o endereço IP do roteador default e um ou mais endereços de servidores DNS. Assim, um novo computador que acesse a rede pode obter essa configuração sem a intervenção do usuário.
 
 
 
Para esse serviço deve existir na rede ao menos um servidor DHCP, que pode estar em um roteador, ponto de acesso sem-fio, ou mesmo em um outro computador. Quer dizer, em um desses equipamentos pode haver um programa que envia mensagens de configuração automática a novos dispositivos que entrem na rede.
 
 
 
Um computador que precise obter sua configuração de rede envia mensagens DHCPDISCOVER em broadcast. Um servidor DHCP, ao receber tais mensagens, responde com uma mensagem DHCPOFFER também em broadcast, contendo uma configuração de rede ofertada. O computador então envia novamente em broadcast uma mensagem DHCPREQUEST, requisitando o endereço IP ofertado pelo servidor. Finalmente, o servidor responde com uma mensagem DHCPACK, completando a configuração do computador cliente. Como a configuração tem um tempo de validade (chamado de ''lease time - tempo de aluguel''), o cliente deve periodicamente renová-la junto ao servidor DHCP, para poder continuar usando-a. O diagrama abaixo mostra simplificadamente esse comportamento:
 
 
[[imagem:Pji1-Dhcp.jpeg|400px]]
 
 
 
Essa troca de mensagens entre clientes e servidor DHCP ocorre somente dentro da mesma rede local. Portanto um cliente não consegue em princípio obter sua configuração de rede de um servidor DHCP que esteja em outra rede local (isso é, se existir um ou mais roteadores entre eles).
 
 
'''Questão:''' como o servidor DHCP diferencia os clientes em uma rede ? Para entender esta pergunta, faça este experimento:
 
# Ative dois hosts na rede do laboratório, e anote os endereços que cada um obteve.
 
# Desligue ambos os hosts.
 
# Agora ative apenas um deles, e observe o endereço IP obtido.
 
# Faça o mesmo com o segundo host.
 
# Houve diferença entre os endereços obtidos em cada etapa ?
 
 
== Uso de NAT no roteador ==
 
 
* [http://pt.wikipedia.org/wiki/Network_address_translation NAT na Wikipedia]
 
* [http://labcisco.blogspot.com.br/2014/09/cgnat-na-transicao-ipv6-solucao-ou-vilao.html CGNAT: NAT usado em larga escala por operadoras de Telecom]
 
 
 
Endereços IP são números de 32 bits, o que significa existirem pouco mais de 4 bilhões de diferentes endereços possíveis (exatamente 4.294.967.296 endereços). Parece muito, porém os endereços IP disponíveis estão praticamente esgotados. Não significa que existam mais de 4 bilhões de equipamentos de rede usando esses endereços, mas sim que todas as subredes distribuídas já contêm quase todos esses endereços. Quer dizer, se uma empresa recebe o direito de usar uma subrede com máscara /24 (255.255.255.0, o que resulta em uma subrede com 256 endereços), todos os endereços ali contidos não podem ser reaproveitados por outras empresas ou organizações, mesmo que não nem todos estejam sendo de fato usados. Por isso nos anos 1990 os orgãos que administram os endereços da Internet tomaram duas iniciativas para lidar com o esgotamento de endereços IP disponíveis.
 
 
 
A primeira iniciativa foi desenvolver uma nova versão do protocolo IP, a qual usaria endereços nem maiores e virtualmente inesgotáveis. Isso fez surgir o protocolo IPv6, cujos endereços têm 128 bits. A quantidade de endereços possíveis é tão grande, que torna difícil compará-la com coisas conhecidas. Para ter uma ideia, existem em torno de <math>3.4~x~10^{38}</math> endereços IPv6 (a quantidade exata é 340.282.366.920.938.463.463.374.607.431.768.211.456 endereços), ou 340 trilhões de trilhões de trilhões ... Por mais que se abuse na forma com que esses endeeços devem ser distribuídos, supõe-se que eles nunca se esgotem (?!). Porém o projeto desse novo protocolo demorou vários anos, e ainda hoje ele não foi adotado em larga escala na Internet.
 
 
 
A segunda iniciativa se chamou NAT (''Network Address Tanslation - Tradução de Endereço de Rede'') e teve por objetivo criar uma forma de reaproveitar endereços IP. Para isso, algumas subredes ficaram reservadas, não sendo distribuídas para nenhum empresa ou organização, e são elas:
 
* 10.0.0.0/8
 
* 192.168.0.0/16
 
* 172.16.0.0/12
 
A ideia é que redes com computadores que só acessam a Internet, mas não são servidores, usem essas subredes (ou parte delas). Essas subredes não são roteáveis, o que significa que os roteadores da infraestrutura da Internet não as conhecem e não sabem como encontrá-las. Por fim, para que computadores dessas redes consigam acessar a Internet, deve nelas existir ao menos um roteador que possua um endereço IP roteável (chamado também de IP válido). Esse roteador deve também possuir uma função especial que modifique os endereços IP de origem contidos nos pacotes que saem em direção a Internet. O endereço IP de origem desses pacotes deve se tornar o endereço IP roteável do roteador. Com isso, os servidores na Internet que receberem esses pacotes poderão respondê-los, pois o endereço de origem é roteável. A figura a seguir ilustra o funcionamento do NAT.
 
 
 
[[imagem:Pji1-Nat2.png|500px]]
 
<br>''Uma rede com roteador NAT''
 
 
 
# Dentro da rede interna, pacotes que saem têm endereço de origem da rede interna (ex: 10.0.0.5)
 
# Ao atravessarem o roteador, seus endereços IP de origem são substituídos pelo endereço IP roteável do roteador (no caso, 14.1.23.5)
 
# O servidor na Internet recebe um pacote que parece ter vindo do roteador NAT, pois seu endereço de origem é 14.1.23.5. O pacote de resposta desse servidor é então endereçado para esse IP.
 
# O pacote de resposta chega ao roteador, que reescreve seu endereço IP de destino para o endereço IP original da rede interna
 
 
 
Hoje em dia todos roteadores, mesmo os mais simples, têm a função NAT. Para que o NAT funcione, basta acessar a interface de gerenciamento do equipamento e ativá-lo. De fato, na maioria desses roteadores o NAT já vem ativado de fábrica. Com isso eles podem ser instalados facilmente, possibilitando que computadores de suas redes acessem a Internet. o NAT funcionou tão bem para o usuário médio da Internet, que pode ter sido um fator significativo para o atraso na adoção do novo protocolo IPv6.
 
 
=== Experimentos com NAT ===
 
 
O IFSC usa NAT ? Descubra por meio deste site:
 
* [http://whatismyipaddress.com/ Qual meu endereço IP ?]
 
 
 
A rede instalada aula passada está com NAT desativado. Ative o NAT no roteador e teste a comunicação entre os computadores de sua rede e:
 
* O computador do professor (192.168.1.1)
 
* O servidor DNS do Google (8.8.8.8)
 
* Um servidor web à sua escolha
 
* Os computadores das outras equipes
 
 
 
Há alguma diferença em relação à rede sem NAT ? Caso afirmativo, qual ? E que implicações pode ter o NAT no roteamento em uma rede ?
 
 
== Atividade ==
 
 
Agora que seus roteadores usam NAT, investigue a comunicação entre computadores de diferentes equipes. Um simples ''ping'' de uma equipe para outra é suficiente. Investigue também o compartilhamento de video e músicas entre seus centros de midia. O objetivo é conseguir realizar esse tipo de compartilhamento nesse novo cenário.
 
 
 
'''Dicas:'''
 
* Leiam o manual do equipamento
 
* Pesquisem sobre termos tais como DMZ, redirecionamento de port (''port redirection'') e ''virtual server''. Sempre associem esses termos à palavra-chave NAT em seus buscas.
 
* Desenhem suas redes, evidenciando os endereços IP envolvidos nos equipamentos e as aplicações usadas para os testes.
 
 
= 11/02: Projeto 2: Experimentos com a rede local (LAN) =
 
 
Para esclarecer o papel de cada equipamento utilizado, vamos fazer alguns experimentos. Lembrem que:
 
* '''roteador''' interliga redes.
 
* '''switch''' interliga equipamentos
 
* '''ponto de acesso (AP)''' assim como ''switch'', um AP interliga equipamentos, mas que se comunicam por sinal de rádio.
 
 
== Comunicação dentro da LAN ==
 
 
Este experimento tem por objetivo mostrar que:
 
* Equipamentos dentro da mesma LAN conseguem se comunicar diretamente
 
* Equipamentos em LANs distintas não conseguem se comunicar diretamente
 
* Cada LAN deve ter uma subrede associada a si
 
 
Para isso, primeiro prepare sua rede desta forma (o PC pode ser um computador do laboratório):
 
 
[[imagem:Lan-exp1.png]]
 
 
# Configure os equipamentos da LAN com endereços IP da sua subrede
 
# Teste a comunicação entre eles (use o programa '''ping''')
 
 
== Estendendo a LAN ==
 
 
Neste experimento, deve-se mostrar que uma LAN pode ser estendida usando ''switches''. Conecte um switch adicional conforme mostrado nesta figura:
 
 
[[imagem:Lan-exp3.png]]
 
 
Em seguida faça o seguinte:
 
* Teste a comunicação entre os equipamentos (use ''ping'')
 
* Anote a quantidade de pacotes recebidos e enviados na interface eth0 em ''pc''.
 
* Execute um ''ping'' entre ''kodi'' e ''pc''. Deixe contar ao menos 10 ''pings''.
 
* Compare a quantidade de pacotes recebidos e enviados na interface eth0 em ''pc''. Qual a relação com os ''pings'' ?
 
 
 
Um outro experimento interessante é este:
 
* Anote a quantidade de pacotes recebidos e enviados na interface eth0 em ''pc'' e em ''kodi''.
 
* Execute um ''ping'' entre ''kodi'' e ''roteador''. Deixe contar ao menos 10 ''pings''.
 
* Compare a quantidade de pacotes recebidos e enviados na interface eth0 em ''pc'' e ''kodi''. Qual a relação com os ''pings'' ?
 
 
 
Agora modifique sua rede para que fique desta forma:
 
 
[[imagem:Lan-exp2.png]]
 
 
# Mantenha o PC com o mesmo endereço IP de antes (i.e. endereço IP da subrede de sua equipe)
 
# Teste a comunicação entre eles (use o programa '''ping''')
 
# O que se conclui com este experimento ?
 
 
== Usando os roteadores ==
 
 
Neste outro experimento, deve-se usar a função de roteador dos equipamentos TP-Link WDR-4300. As redes das equipes devem ser interligadas conforme mostrado a seguir:
 
 
[[imagem:Pji1-Roteadores.png|400px]]
 
<br>''Redes das equipes''
 
 
As subredes das equipes devem continuar as mesmas. Quer dizer que nas LANs (redes locais) das equipes serão usadas as mesmas subredes dos experimentos anteriores.
 
 
 
Para que essa grande rede funcione, alguns detalhes devem ser observados:
 
* como devem ser interligados os equipamentos ?
 
* como devem ser definidos os endereços dos equipamentos ?
 
* como deve ser feito o roteamento ?
 
* que configurações são necessárias no computador do professor (que tem o papel de roteador do laboratório) ?
 
 
 
As equipes devem interagir para definir esses detalhes, e planejar a implantação de toda a rede. Ao final, todos os computadores devem conseguir se comunicar entre si e com a Internet. Esse cenário deve ser testado de duas formas:
 
# ''Com NAT desativado''
 
# ''Com NAT ativado''
 
 
= 12/02: Projeto 2: estabelecendo o enlace WAN =
 
 
O próximo passo do projeto 2 envolve estabelecer o enlace WAN da rede de cada equipe. Através desse enlace a rede da equipe pode acessar a Internet. Alguns detalhes devem ser entendidos para que essa comunicação funcione a contento. A ideia é que a rede fique assim:
 
 
 
[[imagem:Pji1-Projeto3-final.png|800px]]
 
 
 
Nessa rede, a infraestrutura de acesso ADSL é provida pelo IFSC, tendo os professores como técnicos responsáveis. O enlace ADSL oferece '''um único IP''' para cada equipe, o qual ficará associado à interface externa (WAN) do roteador ADSL. Por fim, não é necessária autenticação para a ativação desse enlace.
 
 
Implante sua rede usando o roteador ADSL, e use-o para acessar a Internet. Experimente também o seguinte:
 
* Meça qual a taxa de download máxima por esse enlace.
 
* Meça a taxa de upload máxima por esse enlace.
 
* Estando fora de sua rede, acesse o seu computador Kodi com o aplicativo [http://en.wikipedia.org/wiki/Secure_Shell SSH].
 
 
== Uma introdução a ADSL ==
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/adsl.pdf Uma visão geral sobre aDSL(com alguns detalhes)]
 
* [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/dslam.pdf Uma descrição sobre DSLAM]
 
* [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/dsl-technologies.pdf Outro bom texto sobre ADSL]
 
* [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/gdslarch.pdf Tipos de enlace que se podem criar com ADSL]
 
* [http://www.kitz.co.uk/adsl/adsl_technology.htm Um guia rápido e bastante explicativo sobre ADSL (principalmente a modulação)]
 
 
<!-- [[imagem:Dsl-network.gif]] -->
 
 
ADSL (Asymetric Digital Subscriber Line) é uma tecnologia para provimento de enlace de dados para assinantes de linhas telefônicas residenciais. Ao contrário da modems analógicos (ex: [http://en.wikipedia.org/wiki/V.92 V.92]), ADSL não está limitado à largura de banda de canal de voz (~ 4kHz). Com isso, podem-se obter taxas de dados muito superiores, dependendo da versão de ADSL em uso. A tabela abaixo ilustra os vários padrões ADSL existentes e suas características.
 
 
 
[[imagem:Adsl-taxas.png]]
 
<br>''Tabela de versões de ADSL e suas características.<br>Obtido em http://en.wikipedia.org/wiki/Asymmetric_digital_subscriber_line#ADSL_standards''
 
 
 
ADSL consegue obter taxas de dados muito superiores às de modems analógicos (que chegavam no máximo a 56 kbps) porque na verdade não usa um canal de voz. A ideia é usar a fiação telefônica para estabelecer um enlace de dados entre o assinante residencial e a operadora, mas não a rede telefônica em si. Por isso que com ADSL pode-se ter o enlace de dados e falar ao telefone ao mesmo tempo. Para isso, na central onde chega a linha do assinante é feita uma separação entre o sinal de dados e o de voz: o de dados vai para uma rede de dados, e o de voz segue pela infraestrutura de telefonia. Em consequência, é necessário haver uma rede de dados separada da rede telefônica. A figura a seguir ilustra um enlace ADSL para um assinante residencial, evidenciando os componentes da infraestrutura da rede dados.
 
 
 
[[imagem:Dsl-architecture.png]]
 
 
 
A separação entre os canais de voz e de dados, feita por um ''filtro passa-baixa'', está destacada na figura abaixo:
 
 
[[imagem:Adsl-model.png]]
 
 
Na infraestrutura ADSL, cabem destacar alguns elementos:
 
* '''modem ADSL:''' equipamento responsável pela ponta do enlace do lado do assinante, fazendo os encapsulamentos das PDUs dos protocolos envolvidos nesse enlace, e a modulação do sinal digital resultante.
 
* '''DSLAM (DSL Access Multiplexer):''' multiplexador de acesso ADSL, que recebe as linhas dos assinantes do lado da operadora. Esse componente faz a intermediação entre os assinantes e a rede de dados da operadora. Dentre suas atribuições, destacam-se a modulação do sinal das linhas dos assinantes, a limitação das taxas de ''downstream'' e ''upstream'' de acordo com o contratado pelos assinantes, e as conversões de protocolos de enlace (quando necessárias) para a rede da operadora. No entanto.
 
* '''splitter:''' filtro que separa os sinais de voz e de dados. São usados tanto do lado do assinante quanto no DSLAM.
 
* '''AC (concentrador de acesso):''' equipamento que concentra as pontas dos enlaces de dados dos assinantes no lado da rede da operadora.
 
 
A parte da infraestrutura ADSL dentro da rede de dados da operadora inclui equipamentos DSLAM (muitos deles), um ou mais AC e as redes de comunicação para interligá-los. Note-se que quem dá acesso de fato à Internet é o AC. A figura abaixo ilustra esses componentes.
 
 
[[imagem:Dslam-infra.png]]
 
 
O enlace de dados entre o equipamento do assinante e a rede da operadora pode ser feita de diferentes formas. Esse enlace é visto pelo assinante como seu enlace para a Internet - i.e. ele obtém seu endereço IP fornecido pela operadora. Os tipos de enlace de dados ADSL mais usados são:
 
* '''PPPoE (PPP over Ethernet):''' cria um enlace ponto-a-ponto com protocolo PPP, cujos quadros são encapsulados em quadros Ethernet. Esta é a forma mais utilizada para assinantes residenciais.
 
* '''PPPoA (PPP over ATM):''' cria um enlace ponto-a-ponto com protocolo PPP, cujos quadros são encapsulados em mensagens AAL5 da arquitetura ATM.
 
* '''EoA (Ethernet over ATM):''' cria um enlace Ethernet, cujos quadros são encapsulados em mensagens AAL5 da arquitetura ATM.
 
 
 
O enlace PPPoE funciona como se tivesse um link ponto-a-ponto entre o roteador ADSL e um concentrador de acesso (AC). Quer dizer, parece que existe um fio ligando diretamente esses dois equipamentos, apesar de na realidade existir toda uma infraestrutura entre os dois. Isso pode ser visualizado na figura abaixo. Em cada ponta desse link PPPoE há um endereço IP usado pelos respectivos equipamentos.
 
 
[[imagem:Enlace-pppoe.png]]
 
 
== ATIVIDADE ==
 
 
Cada equipe deve estabelecer seu enlace WAN usando ADSL. Em seguida, deve validar seu centro de midia na rede, compartilhando midia para as outras equipes e acessando seus centros de midia.
 
 
=== Configurações ADSL ===
 
 
Cada link ADSL deve ter seu IP manualmente configurado, o qual deve ser um IP válido fornecido à equipe pelo provedor (professores).
 
 
Os seguintes parâmetros dos modems ADSL devem ter estes valores:
 
* '''Port:''' ''0''
 
* '''VPI:''' ''8''
 
* '''VCI:''' ''35''
 
* '''Encapsulamento:''' ''LLC/SNAP''
 
* '''Modo:''' ''PPPoE''
 
* '''User:''' usuario1
 
* '''Password:''' senha1
 
* '''NÃO''' ativar firewall.
 
* '''Ativar''' NAT
 
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/videos/eh_logo_ali_1.mp4 Link de teste de download]
 
 
= 18/02: Projeto 2: Criando uma pequena WLAN e experimentando o link WAN =
 
 
A rede de cada equipe deve poder ser acessada por dispositivos móveis (celulares, tablets e laptops). Portanto, ela deve implantar também uma rede local sem-fio. Hoje em dia a instalação de uma rede sem-fio está muito facilitada, mas ainda assim há detalhes para os quais deve-se prestar atenção.
 
 
== Rede local sem-fio padrão IEEE 802.11 (WiFi) ==
 
 
Uma rede local sem-fios (WLAN - Wireless Local Area Network) serve para conectar dispositivos usando sinal de rádio. Hoje em dia estão tão difundidas que não se imagina um lugar sem cobertura por ao menos uma dessas redes, cuja tecnologia se chama WiFi (ou [http://tele.sj.ifsc.edu.br/~msobral/RCO2/docs/ieee/802.11-2007.pdf IEEE 802.11], nome oficial do padrão). As pessoas as utilizam para conectar seus smartphones e tablets, além de laptops e mesmo equipamentos diversos ([http://produto.mercadolivre.com.br/MLB-564886491-internet-box-tv-smart-multilaser-android-wifi-hdmi-usb-sd-_JM media centers], [http://olhardigital.uol.com.br/video/qual-e-a-melhor-impressora-wi-fi-do-momento/30117 impressoras], [http://cameras.about.com/od/reviews/tp/best-wi-fi-cameras.htm câmeras fotográficas],[http://www.techradar.com/news/television/6-best-smart-tv-platforms-in-the-world-today-1120795 TVs], e mesmo [http://stations.windguru.cz/intro.php estações meteorológicas], entre outros). Todos esses dispositivos fazem uso de uma infraestrutura relativamente simples.
 
 
 
Uma WLAN é implantada usando um equipamento especial chamado de ponto-de-acesso (AP - ''Access Point''). Um AP transmite periodicamente (10 vezes por segundo) uma pequena mensagem que informa os dispositivos ao redor sobre o nome da rede sem-fio por ele controlada. O alcance típico do sinal do AP é de algumas dezenas de metros. Assim, dispositivos que recebam essa mensagem (chamada de ''beacon'') podem vir a saber que existe essa rede, e se conectarem a ela. Uma vez conectado, um dispositivo pode se comunicar por intermédio do AP. Como usualmente um AP é instalado de forma a estar conectado a uma LAN, os dispositivos a ele conectados podem se comunicar também com a Internet. A figura abaixo ilustra uma pequena WLAN com seu AP provendo conectividade a dispositivos sem-fio, além de estar conectado a um switch de uma LAN.
 
 
[[imagem:Pji1-projeto2.png|500px]]
 
 
 
Várias gerações das redes WiFi já foram lançadas, e cada nova geração aumenta significativamente a taxa de transmissão máxima da rede. Atualmente (geração IEEE 802.11ac) essas redes conseguem se comunicar a taxas de transmissão de até 1.3 Gbps. Isso depende do modelo do AP e das interfaces de rede dos dispositivos que usam a rede sem-fio. Na prática, a taxa de transmissão que um dispositivo consegue, no máximo, é um pouco menor que a metade da taxa nominal (ex: para uma rede a 300 Mbps, essa taxa deve ser pouco superior a 100 Mbps). Se houver mais dispositivos, essa taxa de transmissão cai ainda mais, pois eles precisarão compartilhar o canal de comunicação com o AP. Porque isso acontece será visto mais tarde no curso. Por curiosidade, a tabela abaixo mostra as taxas de transmissão máximas das diferentes gerações das redes WiFi.
 
 
{| border=1
 
!Geração
 
!Ano de lançamento
 
!Taxa de transmissão máxima
 
|-
 
|IEEE 802.11 || 1997 || 2 Mbps
 
|-
 
|IEEE 802.11a || 1999 || 54 Mbps
 
|-
 
|IEEE 802.11b || 2000|| 11 Mbps
 
|-
 
|IEEE 802.11g || 2003 || 54 Mbps
 
|-
 
|IEEE 802.11n || 2009 || 600 Mbps
 
|-
 
|IEEE 802.11ac || 2013 || 1.3 Gbps
 
|}
 
 
 
Uma WLAN possibilita que qualquer dispositivo no alcance do sinal do AP possa a ele se conectar. Isso tem um porém, pois pessoas podem usar indevidamente uma rede sem-fio. Para evitar esse mau-uso, as WLANs possuem um modo de segurança, sendo WPA2-PSK (ou WPA-PSK, WPA Personal, WPA Pessoal) o recomendado para pequenas redes. Basicamente pode-se fazer com que:
 
* somente pessoas que conheçam uma determinada senha tenham acesso à rede
 
* todas as comunicações da rede sem-fio sejam encriptadas (protegidas). Com isso se alguém estiver monitorando as transmissões de uma rede sem-fio (e isso é muito fácil de fazer !), não conseguirá entender nada.
 
 
Resumindo, para instalar um AP é necessário configurar os seguintes parâmetros:
 
* '''SSID (nome da rede):''' um breve texto com o nome da rede
 
* '''Canal:''' o canal de comunicação, parecido com os canais das estações de rádio. Pode haver mais de um AP no mesmo canal, porém quanto mais dispositivos se comunicam por um canal, menor a velocidade da rede por eles percebida.
 
* '''Segurança:''' WPA2-PSK, com uma senha que deve ter no mínimo 8 caracteres. Recomenda-se que essa senha seja aleatória (ou não seja uma palavra que possa ser deduzida por quem tente invadir sua rede).
 
 
Experimente investigar os parâmetros de um AP de verdade usando este emulador:
 
* [http://www.tp-link.com/resources/simulator/TL-WDR4300/index.htm TP-Link WDR4300]
 
 
 
Assim, para instalar uma nova rede sem-fio, basicamente deve-se usar um AP. Ele deve ser conectado a uma rede cabeada para ter acesso a Internet. Por fim, o AP precisa ser devidamente configurado para denominar a rede por ele criada, e também o modo de segurança para uso da rede sem-fio.
 
 
=== Atividade ===
 
 
Implante sua rede sem-fio conforme as recomendações da seção anterior. Em seguida, use-a para acessar tanto o centro de midia quanto a Internet. Por fim, faça as seguintes verificações:
 
* Compartilhe midia com as outras equipes.
 
* Acesse o centro de midia das outras equipes.
 
* Meça a taxa de transferência (''velocidade da rede'') a partir da rede sem-fio, e compare-a com a da rede cabeada.
 
* Prepare sua rede para que seu centro de midia possa ser acessado de fora via SSH.
 
 
== Uma outra forma de fazer o link WAN com ADSL (modo bridge) ==
 
 
Aula passada vimos como implantar um enlace WAN com ADSL. Hoje faremos uma outra investigação sobre a infraestrutura da rede como um todo.
 
 
 
O link ADSL implantado até o momento explorou o roteador ADSL para criar o link e interligar a rede interna com a Internet através dele. A figura abaixo mostra o papel do roteador ADSL, e como fica o link para Internet (em vermelho pontilhado).
 
 
 
[[imagem:Enlace-pppoe.png]]
 
 
 
O link ADSL é denominado ''enlace PPPoE'' na figura, porque esse link funciona como um enlace ponto-a-ponto especial (daí o nome ''PPPoE'' = ''Point-to-Point over Ethernet''). Apenas para ilustrar, ''PPP'' é nome de um tipo de enlace usado entre dois equipamentos ligados por um cabo, e é usado, por exemplo, em acesso discado e em link de dados 3G. No caso do ''PPPoE'', parece que se cria um enlace ''PPP'', mas por baixo há mais do que um cabo entre os equipamentos (pela figura aparece toda uma rede entre eles ...). Os detalhes técnicos de como isso funciona de fato deve ser visto na 2a e 3a fases do curso. No momento o que interessa é saber que para estabelecer um link ADSL típico é necessário usar esse protocolo ''PPPoE''.
 
 
O link ADSL feito até agora usou o roteador para estabelecer o enlace PPPoE. Porém há outra forma de fazer esse enlace: deixar o roteador ADSL operando em modo ''bridge'' (''ponte'') e usar outro equipamento para fazer o enlace ''PPPoE''. Na rede das equipes, o próprio computador do centro de midia pode fazer esse papel. Esse outro cenário ficaria como mostrado abaixo:
 
 
 
[[imagem:Projeto2-adsl-bridge.png]]
 
 
 
O uso de modo ''bridge'' tem algumas vantagens:
 
* '''O endereço IP fornecido pelo provedor fica no equipamento interno usado para fazer o enlace PPPoE''': isso possibilita um maior controle sobre as comunicações entre a rede interna e externa, pois roteadores ADSL costumam ser funcionalmente limitados (por isso são tão baratos !).
 
* '''Aumenta a quantidade de comunicações simultâneas entre rede interna e Internet:''' isso é uma consequência de o equipamento interno poder ter maior capacidade computacional que o roteador ADSL. Em particular, roteadores ADSL suportam uma quantidade limitada de sessões NAT simultâneas, devido à pequena quantidade de memória RAM disponível (novamente, por isso são baratos ;-). Tal limitação não existe para um computador com Linux.
 
* '''Aplicações P2P (dentre outras) podem funcionar melhor''': se for usado um computador para fazer o enlace PPPoE, programas nele executados podem se comunicar mais facilmente com a Internet. Isso se dá porque as comunicações entre esse computador e a Internet não são modificadas por NAT - e NAT atrapalha alguns tipos de comunicação, tais como P2P e VoIP.
 
 
... e desvantagens:
 
* '''O equipamento interno precisa ser capaz de criar enlaces PPPoE''': se for usado um computador, ele deve ter um software capaz de estabelecer esse tipo de enlace. Esse software precisaria assim ser instalado e devidamente configurado.
 
* '''O equipamento interno precisa estar sempre ligado:''' para que o link para a Internet esteja sempre ativado, o equipamento interno precisa também ser mantido ligado. Se for usado um computador, isso significa um gasto maior de energia (mas talvez não seja significativo).
 
* '''O equipamento interno fica mais exposto à Internet:''' como esse equipamento está diretamente ligado à Internet, há uma chance maior que seja invadido debido a essa exposição. Portanto tal equipamento deve ser protegido, bloqueando tentativas de acesso externas (algo nem sempre fácil de fazer). O uso de softwares para [http://pt.wikipedia.org/wiki/Firewall firewall] torna-se essencial.
 
 
 
Para perceber as diferenças, vamos implantar o link para Internet com ADSL em modo bridge.
 
 
=== Preparação de um computador Linux para usar PPPoE ===
 
 
Em sistemas Linux baseados na distribuição Debian há duas maneiras de criar um enlace PPPoE:
 
* '''Com o Network-Manager''': o ''network-manager'' é um aplicativo que auxilia o estabelecimento de enlaces em geral (cabeado, sem-fio, discado, ...). Ele é acessado normalmente por uma ''applet'' na barra de aplicativos, no topo da tela.
 
* '''Editando os arquivos de configuração de rede''': essa forma é um pouco mais complicada, mas funciona em qualquer sistema Linux. A seguir há uma explicação sobre como realizá-la.
 
 
A forma manual de estabelecer o enlace PPPoE segue estes passos:
 
# Instale o software necessário: <syntaxhighlight lang=bash>
 
sudo apt-get install pppoe
 
</syntaxhighlight>
 
# Edite o arquivo ''/etc/ppp/peers/adsl'', que deve ficar com este conteúdo: <syntaxhighlight lang=text>
 
pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452 -C pji"
 
noipdefault
 
usepeerdns
 
defaultroute
 
hide-password
 
lcp-echo-interval 20
 
lcp-echo-failure 3
 
connect /bin/true
 
noauth
 
persist
 
mtu 1492
 
noaccomp
 
user usuario1
 
default-asyncmap
 
</syntaxhighlight>
 
# Edite o arquivo ''/etc/ppp/chap-secrets'' e acrescente o seguinte: <syntaxhighlight lang=text>
 
usuario1  *  senha1
 
</syntaxhighlight>
 
# Ative o enlace PPPoE executando o seguinte comando: <syntaxhighlight lang=bash>
 
sudo pppd call adsl
 
</syntaxhighlight>
 
# Ative o encaminhamento de pacotes entre interfaces do seu PC: sendo o roteador da sua rede, ele deve ser capaz de fazer o encaminhamento de pacotes entre rede interna e externa: <syntaxhighlight lang=bash>
 
sudo sysctl -w net.ipv4.ip_forward=1
 
</syntaxhighlight>
 
# Ative o NAT em seu PC: como ele agora é o roteador da sua rede, então ele precisará ser também o tradutor NAT: <syntaxhighlight lang=bash>
 
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
 
</syntaxhighlight>
 
 
=== Atividade ===
 
 
# Modifique a rede de sua equipe para que o acesso a Internet seja feito com ADSL em modo bridge.
 
# Compartilhe conteúdo do seu centro de midia com as outras equipes, e vice-versa.
 
 
== Conclusão do Projeto 2 ==
 
 
O projeto 2 chega a seus momentos finais. Para conclui-lo devem ser realizadas algumas tarefas:
 
# O centro de midia deve poder ser acessado externamente com SSH. A equipe deve demonstrar o acesso na prática, e explicar o que foi necessário configurar na rede para que funcionasse.
 
#* '''IMPORTANTE:''' isso implica configurar seu roteador para que o NAT permita o acesso a um computador interno para um serviço específico (ex: web). No roteador TP-Link isso se chama ''virtual server''. Mas se você usar o próprio computador como roteador, esse problema não existirá. 
 
# Ao menos um recurso adicional deve ser acrescentado ao centro de midia. Tal recurso deve envolver o acesso a Internet. Ex:
 
#* Obtenção de conteúdo via rede P2P
 
#* Obtenção automática de legendas de filmes
 
#* Integração do centro de midia com algum serviço da Internet (streaming, VoIP, Skype, ...)
 
# '''OPCIONAL:''' O centro de mídia deve compartilhar conteúdo com outras equipes. Obs: de preferência isso deve ser feito de forma controlada (com algum tipo de controle de acesso). Isso não é trivial ...
 
 
 
A apresentação do projeto 2 deve ser feita dia '''25/02 (5a feira)'''. Ela deve constar de:
 
* Um relatório apresentando uma visão geral do projeto (o resultado final do que foi implantado), e uma documentação que informe cada ítem, componente, software ou equipamento utilizado e para que foram usados. O relatório deve, por fim, apresentar um roteiro que possibilite reproduzir o que foi implantado no projeto. Esse roteiro deve possibilitar que outro técnico reproduza o projeto.
 
* A realização de um conjunto de tarefas por cada equipe.
 
* Uma entrevista com cada membro da equipe.
 
 
= 25/02: Projeto 2: apresentação =
 
 
A avaliação inicia com a realização de um conjunto de tarefas por cada equipe. Em seguida, o professor entrevistará os membros de cada equipe.
 
 
 
== Tarefas ==
 
 
''Obs: as tarefas podem ser realizadas tanto pela interface gráfica quanto pela linha de comando, a não ser que se peça o contrário.''
 
 
 
1. Configure a rede de sua equipe para que use a subrede 192.168.10X.0/24, sendo X o número da sua equipe.
 
 
 
2. Use o roteador TP-Link WDR4300 como o roteador da sua equipe.
 
 
 
3. Em sua rede, os endereços IP com último octeto entre 50 e 100 devem ser alocados para DHCP.
 
 
 
4. Configure sua rede para que seu computador possa ser acessado externamente via SSH (port 22/TCP).
 
 
= 26/02: Projeto 3 a rede de dados e a rede telefônica =
 
 
No projeto 3, um serviço telefônico será adicionado à rede implantada até então. Esse serviço fará uso de aparelhos telefônicos convencionais e também dispositivos capazes de fazer chamadas de voz (ex: smartphones, computadores com softphones). Além disso, o serviço de voz a ser agregado à rede será implantado com diferentes tecnologias (convencional e por meio da rede de dados). A figura a seguir ilustra o acréscimo a ser feito inicialmente à rede:
 
 
[[imagem:Pji1-Projeto3-geral.png]]
 
 
Para começar, cada equipe deve instalar um telefone IP, e prepará-lo para uso. O objetivo é '''cada equipe conseguir fazer chamadas a qualquer das outras equipes'''.
 
 
== Uma introdução a redes telefônicas ==
 
 
Uma rede telefônica pode ser vista de forma (muito) simplificada na figura abaixo. O objetivo desse diagrama é evidenciar alguns elementos existentes na borda dessa rede:
 
* os assinantes com seus telefones e PBX (um tipo de central telefônica privativa)
 
* o laço local, que é o par de fios metálicos que chega ao assinante
 
* a interface FXO, que liga o PBX a um tronco analógico.
 
* a interface FXS, que fornece a linha telefônica a telefones de ramais.
 
 
[[imagem:PJI1-Rede-relefonica-simples.png]]
 
 
 
Uma coisa importante a notar é que cada linha telefônica tem um número de assinante (o número de telefone). Esse número é fisicamente vinculado a essa linha, portanto qualquer aparelho telefônico a ela ligado irá atender por esse número. Outra coisa a se observar é que a rede telefônica tem uma infraestrutura exclusiva para o transporte das chamadas (quer dizer, toda a fiação e interligação de centrais mundo afora).
 
 
 
A figura abaixo mostra um diagrama simplificado de uma rede telefônica baseada em VoIP (Voz sobre IP). Alguns elementos importantes são:
 
* o servidor SIP, que funciona como uma central telefônica para essa rede.
 
* o telefone IP, que é um aparelho telefônico capaz de se comunicar diretamente por essa rede.
 
* o ATA (Adaptador de Telefone Analógico), que possibilita usar essa rede com um telefone analógico convencional.
 
* a infraestrutura da rede de dados, que possibilita a comunicação entre os telefones IP e o servidor SIP (e, claro, o transporte das chamadas)
 
 
[[imagem:Pji1-Rede-sip1.png]]
 
 
 
Na rede acima, o número de assinante usado por um telefone IP (ou ATA) é registrado no servidor SIP. Assim, qualquer telefone IP ou ATA pode personificar um determinado número de assinante, bastando que se registre nesse servidor. Outra diferença em relação à rede telefônica convencional é o uso da rede de dados (Internet) para a realização de chamadas. Portanto, não há uma rede exclusiva para o transporte das chamadas.
 
 
Por fim, ambas redes podem conviver e chamadas podem sair de uma rede e se destinar à outra. A figura abaixo mostra um exemplo simplificado de como essas redes podem se interligar.
 
 
[[imagem:Pji1-Rede-sip-pstn.png]]
 
 
== Instalação de um telefone IP ou ATA ==
 
 
Tanto um telefone IP quanto um ATA são hosts de uma rede TCP/IP. Portanto, [[PJI-2015-1#O_que_todo_host_deve_possuir|como todo host, eles precisam de algumas definições]]. Além disso, devem ser configuradas algumas informações específicas da rede telefônica VoIP:
 
* O número do telefone, chamado de ''usuário SIP'' ou ''conta SIP''.
 
* A senha para verificação do usuário SIP: essa senha é utilizada para autorizar o usuário SIP junto ao servidor SIP. Lembre que o servidor SIP funciona como uma central telefônica para o serviço de voz a ser implantado.
 
* O endereço do servidor SIP: alguns aparelhos pedem também os endereços do servidor de registro e proxy, que usualmente são os mesmos. O servidor SIP a ser usado deve ser o do provedor VoIP que fornece o serviço telefônico VoIP contratado (ver [http://www.teleco.com.br/opvoip.asp algumas opções no Brasil]).
 
* O domínio da rede telefônica VoIP a que ele pertence: isso é opcional em nosso experimento, porém em uma rede VoIP de fato tal informação é essencial.
 
 
 
Basicamente as informações acima são necessárias em qualquer telefone IP, ATA, softphone, ou dispositivo que use a rede telefônica VoIP. Porém cada equipamento tem suas particularidades, como se descobrirá no laboratório hoje.
 
 
== Atividade ==
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/intelbras/manual_GKM_2000T.pdf Manual ATA GKM 2000T]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/intelbras/manual_intelbras_gkm1000.pdf Manual ATA GKM 1000]
 
* [http://tele.sj.ifsc.edu.br/~msobral/pji/intelbras/Manual_do_usuario_Intelbras_Voiper1.pdf Manual Telefone IP Voiper]
 
 
Hoje cada equipe deve conseguir ativar um telefone IP, e usá-lo para fazer chamadas para outras equipes.
 
 
Há dois tipos de telefone no laboratório:
 
* '''Telefone IP:''' possuem toda a funcionalidade necessária para fazer chamadas de voz sobre a rede de dados (VoIP)
 
* '''Telefones convencionais + ATA:''' a funcionalidade para fazer chamadas sobre a rede de dados é fornecida pelo ATA (Adaptador de Telefone Analógico). A ele se conecta um telefone analógico convencional, e com isso se conseguem fazer e receber chamadas de voz.
 
 
Em ambos os casos, devem-se configurar esses dispositivos com algumas informações:
 
* '''Usuário:''' o número de ramal (ou mesmo de telefone). Use 1000+''número de sua equipe'' (ex: equipe 1 usa 1001).
 
* '''Senha:''' a senha para registro do dispositivo na central telefônica VoIP
 
* '''Servidor SIP:''' endereço IP da central telefônica VoIP (no caso, 192.168.1.101)
 
* '''Endereço IP:''' o endereço IP a ser usado pelo telefone ou ATA
 
* '''Gateway:''' o roteador default do telefone ou ATA (no caso, o gateway da sua rede)
 
 
Tanto o ATA quanto o telefone IP podem ser configurados pelo teclado ou por uma página web. Ao menos o endereço IP precisa ser definido para acessar a página web. Cada modelo de equipamento tem suas particularidades, que estão explicadas em seus manuais.
 
 
Após configurar os equipamentos, teste a chamada entre equipes.
 
 
== Extra: usando a rede telefônica VoIP com os smartphones ==
 
 
Os smartphones são capazes de fazerem chamados usando a rede telefônica VoIP que implantamos. Eles precisam de um app capaz de fazer e receber chamadas SIP (isso se chama softphone). Para Android alguns softphones são:
 
* Zoiper
 
* Linphone
 
* CSipSimple
 
* SIPdroid
 
 
A configuração desses app é muito parecida com a de telefones IP ou ATA, mas mais simples.
 
 
= 03/03: Projeto 3: instalação dos PBX das equipes =
 
 
Nesta etapa do projeto 3, cada equipe deve ter o seu PBX IP capaz de fazer chamadas entre telefones e softphones. Lembrem que um PBX IP pode ser entendido como um pequena central telefônica privada capaz de fazer chamadas telefônicas através da Internet. Esse tipo de PBX usa alguma tecnologia VoIP (''Voice over IP'' - Voz sobre IP) para fazer chamadas e transmitir a voz digitalizada entre os telefones. Na nossa instalação, a tecnologia usada se chama modelo SIP. Com esses recursos, pretende-se criar uma rede telefônica privativa em laboratório, em que todas as equipes podem fazer chamadas entre si, como mostrado na figura a seguir.
 
 
[[imagem:Pji1-projeto3-pbxs.png|600px]]
 
<br>''Exemplo da rede telefônica no laboratório entre duas equipes. As linhas tracejadas mostram as etapas para o estabelecimento de uma chamada desde a Equipe A até Equipe B''
 
 
Para realizar as atividades, serão usados alguns ''blocos de montagem'':
 
* '''PBX IP''': um computador com software [http://www.asterisk.org Asterisk] devidamente instalado e configurado deve fazer o papel de PBX. Existem outros softwares capazes de transformarem um computador em PBX IP, tais como  http://www.freeswitch.org Freeswitch] e [http://www.sneplivre.com.br Snep] (este útlimo na verdade é composto por um Asterisk e uma interface de administração, mas ainda tem muitos bugs).
 
* '''Telefones IP''': telefone IP é o aparelho que contém todas as funcionalidades para fazer e receber chamadas VoIP. Ele tem as teclas para discagem, o bocal, e embute um pequeno computador para se comunicar pela rede.
 
* '''ATA''': o ''Adaptador de Telefone Analógico'' (ATA) é usado para tornar um telefone analógico capaz de fazer chamadas VoIP. O ATA contém um pequeno computador e interface de rede.
 
* '''Softphone''': um telefone IP implementado em software. Como ele pode-se transformar um computador, tablet ou smartphone em telefone IP capaz de fazer chamadas pela rede telefônica VoIP implantada. Exemplos de softphone são [http://jitsi.org Jitsi] (para computadores) e [http://www.zoiper.com Zoiper] (para tablets e smartphones Android).
 
* '''Provedor SIP''': este é um PBX IP especial, que tem papel de interconectar outros PBX IP e, possivelmente, prover acesso a PSTN. No nosso caso, ele vai interligar os PBX das equipes.
 
 
== Atividade 1: rede telefônica VoIP de cada equipe ==
 
 
Cada equipe deve ter seu PBX IP instalado.
 
 
O primeiro passo é conseguir fazer chamadas entre telefones IP e softphones da própria equipe. Sendo assim, deve-se garantir que a rede IP esteja funcionando adequadamente:
 
# Roteador:
 
## Rede externa: interface WAN com endereço dinâmico (fornecido pelo provedor com PPPoE).
 
## Reda interna: interface LAN com endereço fixo.
 
## Roteamento: rota padrão definida diretamente pelo PPPoE.
 
## NAT ativado.
 
## Serviço DHCP para a LAN: faixa de endereços que não conflite com os endereços do roteador e servidor (central).
 
# Servidor (Central):
 
## Rede: interface com endereço fixo.
 
## Roteamento: rota padrão para o roteador da equipe.
 
 
=== Elementos básicos do Asterisk ===
 
 
* [http://tele.sj.ifsc.edu.br/~msobral/rmu/slides/aula-25.pdf Transparências]
 
* [http://www.asterisk.org Site oficial do Asterisk]
 
* [http://www.asteriskguru.com/ Asterisk Guru]
 
* [http://www.voip-info.org/wiki Dicas sobre Asterisk]
 
* [http://www.asteriskdocs.org/ Livro online gratuito sobre Asterisk]
 
* [http://www.packetizer.com/ipmc/sip/papers/understanding_sip_voip/ Introdução a VoIP e SIP]
 
 
 
'''Asterisk:''' uma solução completa de PABX baseado em software, permitindo ligar o mundo IP ao mundo da rede pública de telefonia comutada.
 
 
 
Basicamente dois componentes do Asterisk precisam ser entendidos para poder usá-lo:
 
* '''Plano de discagem:''' o plano de discagem define como cada chamada deve ser processada. As instruções de processamento residem no arquivo de configuração ''/etc/asterisk/extensions.conf''. O fluxo de processamento de chamadas pode ser visto resumidamente abaixo:<br><br>[[imagem:Asterisk-fluxo.png|400px]]
 
* '''Canais:''' cada telefone SIP deve ter seu identificador cadastrado no Asterisk. O identificador pode tanto ser um número, análogo a um ramal, ou uma string alfanumérica. No terminologia do Asterisk, cada telefone SIP é chamado de ''canal SIP'', e deve estar declarado em ''/etc/asterisk/sip.conf''. Há outros tipos de canais além de SIP, os quais possibilitam integrar telefones analógicos e troncos digitais ao PBX.
 
 
=== Instalação do Asterisk ===
 
 
Instale o Asterisk no computador do centro de midia, e configure-o para possibilitar chamadas entre ramais da equipe:
 
# Instale o Asterisk: <syntaxhighlight lang=bash>
 
sudo apt-get install asterisk
 
</syntaxhighlight>
 
# As configurações do Asterisk ficam no subdiretório ''/etc/asterisk''. Precisaremos renomear alguns arquivos de configuração, pois iremos substitui-los por outros: <syntaxhighlight lang=bash>
 
cd /etc/asterisk
 
sudo mv sip.conf sip.conf.old
 
sudo mv extensions.conf extensions.conf.old
 
</syntaxhighlight>
 
# Crie o arquivo ''/etc/asterisk/sip.conf'', e nele grave o seguinte conteúdo: <syntaxhighlight lang=text>
 
; Todos os ramais a serem criados vão compartilhar estas configurações
 
[pji](!)
 
type=friend
 
insecure=port,invite
 
disallow=all
 
allow=gsm
 
allow=ulaw
 
allow=alaw
 
context=default
 
host=dynamic
 
qualify=yes
 
directmedia=no
 
 
; Um exemplo de ramal ... crie outros à vontade
 
[1000](pji)
 
username=1000
 
secret=1000
 
</syntaxhighlight>
 
# Crie o arquivo ''/etc/asterisk/extensions.conf'', e nele grave o seguinte conteúdo: <syntaxhighlight lang=text>
 
[default]
 
; qualquer número de destino com quatro dígitos é comutado automaticamente
 
exten=>_ZXXX,1,Dial(SIP/${EXTEN})
 
same=>n,Hangup()
 
</syntaxhighlight>
 
# Reinicie o Asterisk: <syntaxhighlight lang=bash>
 
sudo service asterisk restart
 
</syntaxhighlight>
 
# Crie um ramal para cada telefone IP ou softphone de sua equipe. Não esqueça de definir uma senha '''não óbvia''' para o seu ramal !
 
# Ative os telefones IP ou softphones, registrando-os no seu PBX IP. Você precisará do endereço IP do seu PBX, e do número de ramal com respectiva senha. Essas informações precisarão ser configuradas no telefone ou softphone.
 
# Teste chamadas entre esses telefones.
 
# Experimente acrescentar o seguinte a ''/etc/asterisk/extensions.conf'': <syntaxhighlight lang=text>
 
exten=>999,1,Answer()
 
same=>n,wait(1)
 
same=>n,Playback(/usr/share/asterisk/sounds/en_US_f_Allison/tt-monkeys)
 
same=>n,Wait(1)
 
same=>n,Hangup()
 
</syntaxhighlight>Em seguida execute este comando: <syntaxhighlight lang=bash>
 
sudo service asterisk restart
 
</syntaxhighlight>... e experimente chamar o número ''999''.
 
# Agora baixe [http://172.18.20.251/~msobral/vol2.sln este arquivo de som] e grave-o em ''/var/tmp''. Em seguida, modifique o plano de discagem para que a extensão 999 fique assim: <syntaxhighlight lang=text>
 
exten=>999,1,Answer()
 
same=>n,wait(1)
 
same=>n,Playback(/var/tmp/vol2)
 
same=>n,Wait(1)
 
same=>n,Hangup()
 
</syntaxhighlight>Em seguida execute este comando: <syntaxhighlight lang=bash>
 
sudo service asterisk restart
 
</syntaxhighlight>... e experimente chamar novamente o número ''999''.
 
 
= 10/03: Projeto 3: instalando um PBX analógico =
 
 
Hoje vamos instalar e ativar um pequeno PBX analógico.
 
 
 
Um PBX analógico interliga um certo número de ramais analógicos, e possibilita que eles se integrem à rede telefônica convencional (RTPC) por meio de um ou mais troncos analógicos. Para cada tronco analógico o PBX deve possuir uma interface FXO, em que se conecta o par metálico de fios telefônicos fornecido pela operadora de serviço telefônico.
 
 
 
[[imagem:Projeto3-pbx-analogico.jpg|800px]]
 
<br>''A rede telefônica analógica e a rede de dados''
 
 
 
A central telefônica analógica possui um modelo muito simplificado. Nenhuma configuração especial é necessária para que os ramais sejam conectados, e para que consigam fazer chamadas entre si e para RTPC. Com ela, a implantação da rede telefônica privativa se resume a conectar os fios dos ramais aos ''soquetes'' (conectores) da central.
 
 
Após sua instalação, teste o seguinte:
 
* chamadas entre ramais (são necessários dois telefones analógicos)
 
* chamadas para um ramal de outra equipe
 
* chamadas para RTOC
 
* chamadas para telefones IP e softphones (VoIP)
 
 
= 11/03: Projeto 3: interligando os PBX das equipes =
 
 
Continuando a implantação da rede telefônica, precisamos interligar os PBX das equipes:
 
 
[[imagem:Pji1-projeto3-pbxs.png]]
 
 
 
== Atividade 1: rede telefônica VoIP entre as equipes ==
 
 
Nesta atividade, serão feitos acréscimos às configurações dos PBX IP para que chamadas entre equipes sejam possíveis. Para isso será necessário que cada equipe crie um '''tronco''' entre seu PBX IP e o '''Provedor SIP'''. Um ''tronco''
 
funciona como uma associação entre dois PBX, a qual serve para transportar chamadas. Um ''tronco'' é implantado como um par de canais SIP (ou usuários SIP):
 
* um canal SIP serve para enviar chamadas através do tronco. No exemplo abaixo é o canal SIP ''ParaProvedor''.
 
* outro canal SIP é usado para receber chamadas vindas pelo tronco. No exemplo abaixo esse canal é ''equipeX''.
 
 
 
A criação do tronco segue estes passos:
 
# Adicione um tronco com tecnologia SIP para o provedor. Isso implica acrescentar o seguinte ao arquivo ''/etc/asterisk/sip.conf'': <syntaxhighlight lang=text>
 
[general]
 
externip=IP_externo_da_sua_equipe
 
register=>equipeX:senhaX@192.168.1.101
 
 
; devem-se informar as redes privativas onde está o Asterisk (pode haver mais de uma ... basta repetir o
 
; atributo localnet para cada subrede). Isso é importante para que o Asterisk saiba quando usar o IP
 
; público (para telefones fora de sua rede) ou privativo (telefones dentro de sua rede)
 
localnet=prefixo/máscara
 
 
; Substitua X pelo número de sua equipe
 
 
[equipeX]
 
type=peer
 
secret=senhaX
 
host=192.168.1.101
 
disallow=all
 
allow=ulaw
 
allow=alaw
 
allow=gsm
 
directmedia=no
 
context=tronco; chamadas recebidas por este canal SIP serão encaminhadas de acordo com a seção "tronco" no plano de discagem
 
qualify=yes
 
insecure=invite,port
 
</syntaxhighlight>
 
# Substitua o conteúdo de ''/etc/asterisk/extensions.conf'' pelo seguinte: <syntaxhighlight lang=text>
 
[default]; aqui se processam as chamadas que vêm dos ramais internos
 
exten =>_ZXXX,1,Dial(SIP/${EXTEN})
 
same=>n,Hangup()
 
 
; esta regra possibilita que se chamem números das outras equipes
 
exten => _0ZZXXX,1,Dial(SIP/equipeX/${EXTEN:1})
 
same=>n,Hangup
 
 
[tronco] ; aqui se processam as chamadas vindas do tronco
 
exten =>_ZXXX,1,Dial(SIP/${EXTEN})
 
same=>n,Hangup()
 
</syntaxhighlight>
 
# Teste as chamadas entre equipes.
 
 
== Plano de discagem com extensões genéricas ==
 
*[http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns Tutorial sobre padrões de extensões no plano de discagem]
 
 
Extensões podem ser representadas de forma compacta com padrões de extensões. Com esse recurso, muitas extensões podem ser atendidas com um único conjunto de regras, evitando um plano de discagem repetitivo. Por exemplo, se uma empresa possui ramais entre 100 e 199, o plano de discagem pode ser escrito assim:
 
 
<syntaxhighlight lang=text>
 
exten=>_1XX,1,Dial(SIP/${EXTEN})
 
same=>n,Hangup
 
</syntaxhighlight>
 
 
A extensão ''_1XX'' contida na primeira linha está escrita como um padrão (''pattern''), pois inicia com o caractere '''_'''. Os caracteres que seguem '''_''' indicam cada dígito que deve aparecer para satisfazer essa extensão. Nesse exemplo, deve aparecer ''1'' seguido de dois dígitos quaisquer entre ''0'' e ''9'' (é esse o significado do caractere ''X''). Desta forma, essa extensão atende qualquer número entre 100 e 199. Por fim, o número de fato chamado é armazenado na variável ''${EXTEN}'', que pode assim ser usada dentro da regra de discagem.
 
 
Alguns caracteres têm significado especial em padrões, como mostrado no exemplo (caractere ''X''). A tabela abaixo lista esses caracteres:
 
 
{| border="1" cellpadding="2"
 
!Caractere
 
!Descrição
 
|-
 
|X|| Qualquer dígito entre 0 e 9
 
|-
 
|Z|| Qualquer dígito entre 1 e 9
 
|-
 
|N|| Qualquer dígito entre 2 e 9
 
|-
 
|[13-6]|| Qualquer dígito entre os colchetes (no exemplo, 1,3,4,5,6)
 
|-
 
|'''.'''||Qualquer sequência de um ou mais dígitos
 
|-
 
|<nowiki>!</nowiki>||Qualquer sequência de zero ou mais dígitos
 
|}
 

Edição das 16h03min de 23 de março de 2016

Endereço encurtado: http://bit.ly/pji20161


Projeto Integrador I: Diário de Aula 2016-1

Professores: Marcelo Maia Sobral (Facebook2.png Facebook) e Simara
Encontros: 2a feira/18:45, 4a feira/19:00
Atendimento paralelo: 2a e 4a feira 18:30 h

Ementa

Introdução e histórico das telecomunicações e da Internet. Uso de serviços e aplicações oferecidos pelas redes de telecomunicações. Conceitos sobre redes de computadores: comutação de pacotes versus comutação de circuitos, redes locais e rede Internet. Instalação de computadores e integração a uma rede local e a Internet. Sistema operacional Linux. Introdução ao sistema telefônico: telefonia fixa e móvel, centrais de comutação, telefonia IP e convergência. Integração de serviços de voz convencionais e VoIP.

Bibliografia

  • FOROUZAN, Behrouz A.; FEGAN, Sophia Chung. Comunicação de dados e redes de computadores. Tradução de Ariovaldo Griesi. 4. ed. São Paulo: McGraw-Hill, 2008. 1134 p., il. ISBN 9788586804885.
  • KUROSE, J. e ROSS, K. Redes de Computadores e a Internet: Uma abordagem top-down. Tradução da 3a edição, Addison Wesley, 2006.
  • COLCHER, Sérgio. VOIP: voz sobre IP. Rio de Janeiro: Elsevier, 2005.

Material de apoio

E:
<mindmap>PJI-2015-2</mindmap>

Curiosidades

Avaliações

As avaliações serão de dois tipos:

  • Projetos: feitos em equipe, serão avaliados de acordo com o cumprimento dos objetivos previamente determinados. Na apresentação do projeto, uma entrevista será feita para definir o conceito concedido a cada membro da equipe.
  • Testes: feitos individualmente, serão aplicados semanalmente no início da aula. O conteúdo para esses testes serão textos informados com uma semana de antecedência, assim como as técnicas e assuntos vistos em aula. A avaliação de cada teste será dada com um dos conceitos S (suficiente) e I (insuficiente).


O conceito final será calculado da seguinte forma:

  • A: ao menos dois projetos A e um projeto B
  • B: ao menos dois projetos B em um projeto C
  • C: ao menos C em todos projetos


Além disso, os testes ajustam o conceito final da seguinte maneira:

  • Incrementa: se pelo menos 75% dos testes S, incrementa conceito final em um nível (ex: B sobe para A)
  • Mantém: se pelo menos 40% dos testes S, mantém conceito final
  • Decrementa: se menos de 40% dos testes S, decrementa conceito final em um nível (ex: A reduz para B)

Projetos

Nome Projeto 1 Projeto 2 Conceito Conceito
após ajuste
Faltas
Alan A A A A/9 0
Alvaro A C C C/6 3
Andreza B B B B/7 18
Cesar Benites A D* D D
Cezar Roggia A D* D D
Diogo A D* D D
Felipe A A A A/10 18
Fernando A D* D D
Gabriel A D* D D
Giordano A A A A/9 15
Higino A A A A/10 18
Kleiton A B B B/7 9
Leonardo D* B C C/6 27
Marcio F. A C C C/6 3
Marcio M. C B B B/8 12
Marcos Felipe A D* D D
Mike A A A A/10 15
  • OBS: I = Indefinido (por ausência à avaliação, ou por ter iniciado a disciplina depois do projeto)
  • OBS 2: conceito acompanhado de ? = falta o relatório do projeto

Testes

Nome T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 Ajuste
Alan S S S S
Alvaro S S S I
Andreza I S I S
Cesar Benites S S I S
Cezar Roggia S S S S
Diogo S I* I* I
Felipe S S I* S
Fernando S S I S
Gabriel S S I I*
Giordano S S S S
Higino S S S S
Kleiton S S S S
Leonardo S S S S
Marcio F. D* I S I
Marcio M. S S I S
Marcos Felipe S S S S
Mike S S I* S

Obs: I* = não fez o teste

Equipes

  • Equipe 1: Mike, Gabriel
  • Equipe 2: Higino, Felipe
  • Equipe 3: Márcio M., Marcos Felipe, Andreza
  • Equipe 4: Alan, Giordano
  • Equipe 5: Álvaro, Diogo
  • Equipe 6: Fernando, César, Cézar
  • Equipe 7: Kleiton, Márcio F.

02/10: Apresentação da disciplina

Documentários sobre telecomunicações

Uma introdução a comunicação de dados

Comunicação dados pode ser entendida como troca de informação entre dois dispositivos através de algum meio de comunicação. A comunicação ocorre no âmbito de um sistema de telecomunicações, composto por equipamentos (hardware) e programas (software). Um sistema básico de comunicação de dados se constitui de cinco componentes:

Rede-intro-1.png

  1. A mensagem: a informação a ser transmitida. O conteúdo da mensagem, seja um texto, música, video, ou qualquer outro tipo de informação, é representada por conjuntos de bits (dígitos binários).
  2. Transmissor: dispositivo que transmite a mensagem.
  3. Receptor: dispositivo que recebe a mensagem.
  4. Meio de comunicação: caminho físico por onde viaja a mensagem do transmissor até o receptor.
  5. Protocolo: conjunto de regras que governa a comunicação de dados.

Atividade

  • Proponha uma solução para:
    • conversar com uma pessoa que está em outra cidade .. e em outro país
    • conversar com uma pessoa que está pescando nas Ilhas Moleques do Sul
    • enviar um documento para outra pessoa, independente de qual cidade esteja
    • monitorar sensores de correntes em bóias marítimas que estão longe da costa ... e se estiverem perto da costa ?
    • controlar um mini-submarino a partir de um barco na superfície
    • copiar um arquivo de um computador para outro
    • escutar músicas em um tablet ou smartphone, sendo que inicialmente não estão nesses dispositivos
    • assistir a um filme que está em um arquivo em outro computador
    • acessar remotamente uma webcam que monitora uma residência.
  • Como funciona cada solução sugerida ?
  • O que todas têm em comum ?
  • Demonstre cada solução proposta por meio de um experimento (isso é, na prática).

08/10: Conceitos básicos e início do projeto 1

O projeto 1 tem por objetivo:


Implantar um serviço de compartilhamento de midia por meio de uma rede de computadores residencial


Isso pode ser detalhado da seguinte forma:

  • O cenário: rede local de alcance reduzido. Uma residência ou pequeno escritório, por exemplo.
  • O problema: armazenar e distribuir mídia em geral para os dispositivos em rede. Músicas, filmes, fotos, etc. Uma casa com vários cômodos ou um escritório com música ambiente.
    • reproduzir midia em e vindo de laptops, desktops, tablets e smartphones
    • reproduzir midia em TVs LCD/LED/Plasma
    • reproduzir midia em amplificadores de audio, ou dock stations
    • controlar a reprodução com controle remoto
    • ... possivelmente outras funcionalidades !
  • Como fazer: pesquisa de ferramentas de armazenamento, organização/catalogação e distribuição de mídia em rede. Compartilhamento automatizado/facilitado para o usuário final.
  • O que usar: sistema operacional Linux, aplicações em rede.


Pji-video-sharing.jpg


Uma pequena rede interliga possivelmente computadores, smartphones, tablets e laptops. Em um ou mais dos computadores existem videos e músicas, que podem estar organizados em listas de reprodução ou por categoria (ex: os videos podem estar classificados por gênero, além de terem uma sinopse obtida do IMDB). As pessoas que usam essa rede gostariam de poder integrar seus dispositivos, de forma a poderem neles reproduzir esses videos e músicas. Assim, eles poderão assistir ou ouvir o que quiserem em qualquer parte do ambiente. Além disso, o contrário também poderia ser desejável: uma pessoa poderia reproduzir em um computador, ou mesmo na TV, videos, músicas e fotos que estão armazenados em seu smartphone ou tablet.


Do ponto de vista da aprendizagem, o projeto 1 tem por objetivos:

  • Usar as interface gráfica e de linha de comando do sistema operacional Linux para operações básicas:
    • Visualizar, copiar, remover e criar arquivos e diretórios
    • Executar programas e terminar processos
    • Editar arquivos de texto simples em modo gráfico ou texto
    • Instalar pacotes de software
  • Usar a rede de computadores, o que implica
    • Referenciar recursos na rede por meio de URL
    • Usar programas apropriados para cada tipo de aplicação de rede
    • Selecionar e usar programas apropriadas para cada necessidade


Começando o projeto

  1. Conheça a rede onde deseja compartilhar videos, músicas e fotos. Veja seus dispositivos e equipamentos de comunicação, e como estão interligados. Veja que programas já existem nos computadores e os sistemas operacionais que estão instalados. Procure entender como um dispositivo móvel (smartphone ou tablet) se integra a essa rede.
  2. Entenda bem o que você quer implantar na sua rede, e como espera que funcione. Se acreditar que lhe ajuda, faça diagramas que mostrem como os dispositivos compartilharão e reproduzirão conteúdos por meio da rede. Você pode também enumerar as situações em que as pessoas farão uso da estrutura que você pretende implantar.
  3. Procure identificar o material necessário e os programas (softwares) que vão desempenhar essas funções. Quer dizer, aqui vale a pergunta "... o que eu preciso para fazer tal coisa ?" e "... como isso será usado ?".
  4. Você certamente precisará usar ao menos um computador com sistema operacional Linux. O que é necessário conhecer para poder utilizá-lo a contento ?

Atividade: identificar softwares para centro de midia

A investigação da turma teve como fruto um conjunto de possíveis softwares para usar no projeto. A escolha de um desses softwares depende dele ser capaz de atender os requisitos listados na descrição do projeto. Assim, a tabela abaixo pretende sistematizar o cumprimento dos requisitos por esses softwares.

Software Reproduz videos Reproduz musicas Apresenta fotos Acessa midia remota Controle remoto Reproduz em outro dispositivo Reproduz vindo de outro dispositivo Linux Gratuito
KooRaRoo x
Mythubuntu
TVersity
Kodi x x x x x x x x x
Plex
JRiver x x x x x x x x
Serviio x x x x
Universal
Miro x x ?? x x x ?? x x
Plex X X X X X X X x +-
Enna x x x x x x
Subsonic x x ?? ?? x x ?? x +-
Moovida x ?? ?? ?? ?? ?? x





Uma visão geral (dos professores) sobre o projeto 1

A realização do projeto 1 envolve a compreensão de um conjunto de conceitos. O mapa conceitual abaixo procura resumir as ideias envolvidas, e como elas se relacionam. Esse mapa pode ser melhorado ao longo do projeto !


Pji1-projeto1-cm.jpg