Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

Mostrando postagens com marcador HD. Mostrar todas as postagens
Mostrando postagens com marcador HD. Mostrar todas as postagens

sábado, 11 de maio de 2013

OpenWRT: Configurando memória swap

Mais um artigo da série sobre o OpenWRT.

Como sempre, o limitador do que pode ser feito em um roteador com OpenWRT é o seu hardware. Quanto ao processador, não temos o que fazer mas, em geral, ele é suficiente, exceto se você quiser fazer transcoding de vídeo em tempo real (não, não dá para fazer no seu roteador). O disco é um dos problemas mais incômodos e já foi tratado em um outro post. Neste foi apresentar a alternativa para contornar a falta de memória RAM.

Se você leu o artigo sobre fazer download de torrents no roteador, pode estar enfrentando problemas com a falta de memória. O sintoma é de processos que desaparecem e avisos de "out of memory" nas mensagens do kernel (dmesg). Pessoalmente, não tive problemas com memória e torrent pois meu roteador tem 64 MB de RAM, o dobro do normalmente disponível em modelos anteriores. Porém, enfrentei a falta de memória ao utilizar um servidor DLNA, enquanto ele varria os arquivos de vídeo.

A solução para a pouca disponibilidade de memória é a mesma faz muito tempo: jogar informações menos usadas em uma memória mais lenta, como o disco. No Linux, chamados esta área em disco de memória swap, ou área de troca. Alguns também chamam de "memória virtual", mas não gosto do termo por confundir a técnica de utilizar endereçamento virtual para regiões de memória.

Para configurar a swap, em primeiro lugar, você precisa de um local para armazená-la. Ele pode ser um disco montado remotamente (NFS), uma unidade remota (NBD) ou simplesmente uma unidade de armazenamento conectada na USB. Nem pense em usar a swap na flash interna do roteador. Além de ser mais escaço que a própria memória RAM, ela não é feita para ser reescrita um grande número de vezes e, se der problema, não é facilmente substituível. Por isto, o primeiro passo é ter acesso a esta unidade externa.

A swap no Linux pode ser implementada em qualquer coisa que se assemelha, na filosofia UNIX, a um arquivo: um arquivo no sistema de arquivos, uma partição, um disco inteiro. A forma mais simples é utilizar uma partição dedicada para esta função.

Reparticione seu disco e deixe uma pequena partição para a swap. Faça com sua ferramenta de particionamento favorita (partition magic, gparted). Pode, inclusive, ser pequena, como 128 MB. Se quiser exagerar, 1 GB é muito mais do que o seu roteador um dia pensou em usar. O problema de ter muita memória swap é quando um processo se perde e começa a usar indefinidamente memória. Quanto maior a memória, mais tempo até o processo conseguir encher a memória e ser morto pelo kernel.

A partição tem que ter o identificador de uma partição swap. Em hexadecimal, é o valor 0x82. Isto é feito com as ferramentas de particionamento, mas pode também ser feito mais adiante com o fdisk, inclusive se instalado no roteador. A saída de um comando "fdisk -l" deve ter uma linha similar a em destaque abaixo:
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63   123758591    61879264+   7  HPFS/NTFS/exFAT
/dev/sdb2       125853210  2928904191  1401525491    f  W95 Ext'd (LBA)
/dev/sdb3       123758592   125851647     1046528   82  Linux swap
Com a partição pronta e com a identificação correta, é o momento de "formatar" a partição. O formatar para uma partição swap é basicamente escrever uma assinatura no começo do disco. É bem rápido. Também é interessante definir o nome da partição, que pode ser usado para referenciá-la mais adiante (no exemplo, "minhaswap").
mkswap -L minhaswap /dev/sdb3
O /dev/sdb3 é o dispositivo da sua partição, como listado na saída do comando "fdisk -l". Para utilizar a swap no seu roteador, você precisará dos utilitários básicos para swap, como o mkswap. Instale o pacote swap-utils.
opkg updateopkg install swap-utils

Agora é a hora de testar a swap. Ative-a com o comando swapon:
swapon /dev/sdb3
Você poderá ver o espaço disponível pelo comando free:
# free             total         used         free       shared      buffersMem:         61700        60480         1220            0         1160-/+ buffers:              59320         2380Swap:      1046524        18884      1027640

Se a linha swap estiver zerada, não está funcionado. Caso contrário, você já estará usando sua nova swap. Contudo, esta configuração feita pelo swapon é volátil. Ao reiniciar o roteador, ela será perdida. Para ativar automaticamente, vamos usar o mesmo recurso que usamos para montagem de disco externo: o arquivo /etc/config/fstab. No arquivo, é possível configurar a montagem de uma swap. A configuração é um pouco mais simples do que partições de arquivos pois não precisa especificar onde será montada. Basta adicionar:
/etc/config/fstab:
config swap
option label "minhaswap"
option enabled 1

Note que o "label" é o mesmo que foi definido ao formatar a partição. Assim como o caso de uma partição de arquivos, também poderia referenciar o disco pela opção "device" ou "uuid". Alternativamente, existe também a opção autoswap, que ativará qualquer partição com identificação 0x82 e formatada como swap.

/etc/config/fstab: 
config global autoswap
option from_fstab 0
option anon_swap 1
Reinicie o roteador para garantir que tudo funciona após reiniciar. Observe se o espaço da swap estará disponível pelo comando free.

Pronto! Pode abusar de seu roteador que agora ele terá memoria extra, mas mais lenta, para suas tarefas.

Peraí, mas não quero mexer com partições! Tem como fazer com um arquivo simples? Tem sim. Em primeiro lugar, crie um arquivo com o tamanho da swap desejada. Use o dd para isto. O tamanho é passado pela opção "count" e é em blocos de 512. Sendo assim, por exemplo, escolha 2 par 1K, 2000 para 1M, 200000 para 100M, e assim por diante. Para uma swap de 50 MB, use:
dd if=/dev/zero of=/mnt/meudisco/swap count=100000
O arquivo /mnt/meudisco/swap deve ficar no disco externo e será, incialmente, completamente zerado. Vai demorar um pouco se for feito no roteador. Depois, você poderá usar os comandos "mkswap" e "swapon" diretamente sobre o arquivo:
mkswap /mnt/meudisco/swapswapon /mnt/meudisco/swap
O problema desta abordagem é que, por não poder usar o /etc/config/fstab, vai se perder ao reiniciar o roteador. Você precisará executar o swapon toda vez que o roteador foi ligado, ou colocar em alguns script como o "/etc/rc.local".

Até a próxima.

sexta-feira, 19 de abril de 2013

OpenWRT: Torrent diretamente no roteador.

Mais um artigo da série sobre o OpenWRT.

conectamos um HD no roteador e compartilhamos na rede. Falta somente arrumar uma aplicação para encher todo este espaço em disco. E para isto, nada melhor que o torrents.

O BitTorrent, ou Torrent para os mais íntimos, é um protocolo de compartilhamento de arquivos peer-to-peer. A principal característica é que todos que estão baixando também fornecem este conteúdo. Assim, retira-se o gargalo dos downloads de uma única fonte. Bem, o importante é que é uma ótima ferramenta para baixar arquivos grandes como os arquivos do Ubuntu, LibreOffice e outras coisas.

Existe algumas alternativas de cliente BitTorrent no OpenWRT, mas vou me limitar ao Transmission por ser leve, integrado ao ambiente e com a possibilidade de administração remota facilitada. Como de praxe, precisam ser instalados os pacotes do programa:

Outro problema que pode ocorrer com os torrents é a falta de memória. Se seu equipamento possuir 64MB ou mais, em geral, deve funcionar sem problemas. Caso contrário, pode ser necessário utilizar uma partição ou arquivo em disco externo como swap. Se aparecer interessados, eu faço um post sobre isto. Acompanhe as mensagens de kernel do sistema por alertas de processos mortos por falta de memória.

O primeiro a ser instalado é o daemon. Ele será o programa que ficará rodando e baixando seus arquivos. Os demais serão formas de acessá-lo.
opkg update

opkg install transmission-daemon
Uma das primeiras interfaces é a versão CLI (console). Com ela, você poderá acompanhar e configurar seus torrents conectando no roteador pelo SSH e rodando o programa. 
opkg install transmission-cli
Existe também uma versão WEB, equivalente à versão gráfica, mas operável de um navegador.
opkg install transmission-web
E uma das mais interessantes é a possibilidade de rodar um cliente Transmission no seu computador e ele controlar os Torrents no seu roteador. Para isto, instale:
opkg install transmission-remote
A configuração é toda feita no arquivo /etc/config/transmission. E uma forma facilitada de configurá-lo é por um módulo da interface web Luci. Neste caso, precisa instalar mais um pacote:
opkg install luci-app-transmission
Recomendo o uso da interface, apesar da tradução pt_BR ainda estar desatualizada. Tomara que seja feita a sincronia das traduções antes de sair a próxima versão estável do OpenWRT. As partes mais importantes, configuradas na web ou no arquivo, são ativação do serviço, o diretório para downloads e o de configuração. Observe que o usuário que rodar o programa deve ter permissão de escrita nestes diretórios. Se for usar a interface web ou remota, existe uma lista de endereços permitidos que pode necessitar de ajuste. Dispare o serviço pela web ou linha de comando:
/etc/init.d/transmission enable
/etc/init.d/transmission start
É bom olhar os logs para ver se não ocorreu algum problema:
logread | grep transmission
Para gerenciar seus torrents, você pode usar:
  • a interface web pelo endereço http://roteador:9091/
  • a partir de uma conexão SSH, a interface CLI, pelo comando transmission-cli
  • um cliente transmission no seu computador apontando para host roteador, porta 9091. Neste caso, as opções de clientes são variadas.
Trocando "roteador" pelo nome ou endereço do seu roteador. Se o endereço do roteador não foi alterado, ele será o 192.168.1.1.


Depois de ter uma instalação básica funcional, volte as configurações e observe se existe algo interessante para ser ajustado. A opção de diretório de arquivos incompletos pode ser interessante se a sua intenção é montar um mediabox.

Apesar de já ser possível baixar arquivos com esta configuração, você terá melhores resultados se os parceiros também conseguirem conectar no seu cliente. Eles tentarão conectar na porta definida pela opção "peer_port". É necessário liberar esta porta no firewall.
Em geral, você irá habilitar a porta definida na opção "peer_port", vinda de qualquer lugar da wan e para qualquer endereço do roteador. Talvez você também queira desligar a proteção de "syn_flood" no firewall pois volume "normal" de conexões em torrents vai além dos limites desta proteção. Ah, e por usar o IP WAN do roteador, que em geral é um IP válido na internet, pode esquecer a necessidade dos encaminhamentos de porta.

Atualização em 13/03/2016: se estiver utilizando o SQM ou outro QoS inteligente, é bom configurar o peer-socket-tos para "low-cost". Assim ele sabe que não deve dar prioridade ao torrent. No pior dos casos, configurar esta opção não terá efeito ;-).

Com o transmission no roteador, você poderá continuar a baixar seus arquivos por dias e com um consumo de energia muitas vezes menor do que um computador tradicional. Ainda, após terminar seus downloads e depois de disponibilizar uma boa proporção dos arquivos, você pode deixar o serviço transmission desligado e dar uma folga ao HD. Isto vai aumentar a sua vida útil.

Let's share!

Bom compartilhamento para vocês.

sábado, 6 de abril de 2013

OpenWRT: Compartilhando seu HD na rede pelo roteador(NAS)

A porta USB no roteador o torna muito versátil. Um dos usos mais interessantes é transformá-lo em um NAS (Network Attached Storage) ou, em suma, um "HD na rede". Para tal, vamos precisar de um roteador com porta USB, uma unidade de armazenamento USB e espaço em disco para instalar o servidor de arquivos.


Depois de conectar um HD externo e, talvez, aumentar o espaço do disco do OpenWRT para poder instalar mais coisas, vamos a instalação do servidor de arquivos. O servidor de arquivos padrão para o Linux é o Samba. Apesar de ser uma implementação do protocolo "padrão" da Microsoft para troca de arquivos em rede, é o que temos de melhor para troca de arquivos mesmo entre duas máquinas Linux. Se o cliente for um Windows®, nem se fala.

Já existe um pacote pronto do samba para o OpenWRT. Basta instalar o pacote samba36-server e, opcionalmente, luci-app-samba, e você terá tudo que precisa para o servidor. Você pode usar tanto a interface WEB como a linha de comando para a instalação:
opkg update
opkg install samba36-server
A configuração do samba pode ser feita com as opções do arquivo smb.conf ou, de forma mais limitada, pela infraestrutura do OpenWRT, no arquivo "/etc/config/samba" . Vou me limitar ao segundo caso pois atenderá a maioria dos usuários. Quanto ao primeiro, não seria diferente de um sistema Linux padrão. Preferencialmente altere o arquivo "/etc/samba/smb.conf.template" pois a configuração final será obtida juntando as informações deste arquivo com o que for configurado em "/etc/config/samba". O pacote luci-app-samba, opcional, fornece uma página na interface WEB Luci que possibilita a configuração básica do samba ou a edição do arquivo "smb.conf.template" sem precisar saber usar o vim.

Na inteface WEB, assim como no arquivo de configuração, é bom definir o nome e o grupo de trabalho do seu roteador. Os diretórios compartilhados são criados em um item sambashare ou em "Diretórios Compartilhados" na interface Luci. Caso a segurança não seja preocupação, ative a opção "permitir convidados" ou "guest_ok". Assim, não será necessário fornecer um usuário e senha para conectar no roteador. A opção "somente leitura" vai no mesmo sentido. Só lembrando que, por padrão, usuário sem senha assume o usuário unix nobody e este precisa ter permissão de leitura ou escrita ou diretório para poder acessar ou escrever nos diretórios. Se a segurança não for importante, dê acesso completo a todos os usuários:
chmod a+rw /mnt/sd??
Onde o /mnt/sd?? é o local onde seu disco está montado no sistema. Só lembre que ao liberar o acesso sem senha e com permissão de escrita a todos, seus arquivos estarão acessíveis a qualquer usuário que tenha acesso a sua rede local. Isto inclui as suas visitas que conectam no seu wireless. Por padrão, o acesso externo (pela internet) ao samba está bloqueado no firewall. Não recomendaria a abertura deste servidor para a internet e, se for feito, por favor, não usem acesso de convidados.

Para colocar o servidor de arquivos em uso, habilite o serviço e inicie:
/etc/init.d/samba enable
/etc/init.d/samba start
E teste a partir de um computador. No windows, o caminho será \\<nome ou ip do roteador\<compartilhamento> e nas interfaces gráficas do Linux, em geral, smb://<nome ou ip do roteador/<compartilhamento>. Ex:
  • \\roteador\fotos ou smb://roteador/fotos
  • \\192.168.1.1\documentos ou smb://192.168.1.1/documentos
Se seu desejo é o uso somente com usuário convidado, sem senha, este artigo termina aqui para você. Para os mais preocupados com segurança, pode-se criar contas no OpenWRT para cada usuário. O processo é o mesmo de um sistema Linux. Infelizmente, por padrão, não tem os comandos para facilitar esta tarefa. Portanto, para criar usuários, adicione linhas como esta ao arquivo /etc/passwd:
newuser:*:1000:65534:new user name:/var:/bin/false
O newuser é o login do usuário. O número 1000 é o identificador. Deve ser único entre os usuários e preferencialmente acima de 1000. "new user name" é o nome completo, sem muito uso no OpenWRT. "/var" é o home e "/bin/false" o shell. Se ele não for conectar por SSH com este usuário no roteador, pode ficar como está. O caminho do home, "/var", pode ser interessante mudar se for habilitada a opção "homes" ou "compartilhas os homes dos usuários" na configuração do samba. Assim, quando ele se autenticar, será criado dinamicamente um diretório compartilhado com o nome do usuário para este caminho. É necessário definir uma senha para este usuário no samba utilizando o comando smbpasswd. Na primeira vez, é preciso criar o usuário nos bancos de dados do samba.
smbpasswd -a usuário
O mesmo comando pode ser usado para trocar a senha, mas sem o "-a".

Com isto temos mais uma função, um NAS, consolidado no roteador. Com um NAS e um servidor DLNA, você terá um MediaBox. Com o NAS e um cliente Torrent, um SeedBox. E por que não ambos? E por que não mais coisas? Isto fica para outro post. Até mais.

segunda-feira, 14 de janeiro de 2013

OpenWRT: conectando um HD pela USB

De volta da vida desconectada, vou começar a escrever as possibilidades de ter um roteador com uma porta USB. Como será um requisito para qualquer uso mais intenso do roteador, precisamos de mais espaço em disco. Isto pode ser obtido conectando qualquer dispositivo de armazenamento USB na porta USB do roteador como Pendrive, HD Externo, leitor de  cartão de memória, celulares, etc. No meu caso, vou conectar um HD externo de 1TB.

Diferentemente de um Linux para Desktop, o OpenWRT precisa economizar espaço em disco ao extremo. Uma das formas de ganhar alguns "mega" é filtrar os módulos de kernel instalados. Em geral, para equipamentos com USB, é pré-instalado um módulo básico de suporte USB como o kmod-usb2. Porém, estes módulos básicos não incluem o uso de unidades de armazenamento USB. O que você vai inicialmente precisar são os pacotes:

  • kmod-usb-storage
  • kmod-usb-storage-extras (opcional, para unidades alternativas como leitores de cartão)
  • para OpenWRT 10.03.1
    • block-hotplug
    • block-mount
  • para OpenWRT 12.09-rc1 (usado nos testes)
    • block-mount (agrega o block-hotplug e o block-extroot)

E os respectivos módulos para cada sistema de arquivos que você pretenda usar:

  • kmod-fs-ext4: para ext2, ext3 e ext4
  • kmod-fs-vfat: para FAT (em geral o que você encontrará em pendrives)
  • kmod-fs-ntfs: NTFS usado pelo windows mas sem acesso de escrita. 

Existem outras alternativas (busque por pacotes kmod-fs-*), mas o que você vai precisar em 99% dos casos são estes três. Se a ideia é deixar um disco fixo no roteador, recomendo usar o ext4. É rápido e feito para ser usado no Linux. Se for movimentar esporadicamente o roteador, ainda assim recomendaria o ext4. Existe driver para windows que funciona muito bem. Também é possível usar o ntfs-3g para montar NTFS com escrita no roteador. Você terá um desempenho inferior e precisará de mais espaço no roteador para instalar os drivers e programas necessários.

Ainda sobre o vfat, e provavelmente o ntfs, você precisará de mais um módulo de suporte da língua do sistema de arquivos. Ao tentar montar o disco, aparecerá uma mensagem de erro do kernel como esta:
FAT: IO charset iso8859-1 not found
Isto significa que você não tem o driver do NLS (Native Language Support) usado pelo seu sistema de arquivos. Instale o correspondente pacote kmod-nls-xxx, onde xxx será a codificação necessária, como kmod-nls-iso8859-1. Com ext4, você não teria este problema.

O que eu uso nas minhas unidades de armazenamento maiores é dividir o disco em duas ou mais partições, sendo uma pequena em FAT e as demais em EXT4. A partição FAT é usada para guardar o driver do ext para windows, para ser instalado em novas máquinas, e para trocas de arquivos com dispositivos não muito abertos como impressoras, TV. As partições EXT4 guardam os dados de verdade.

Com os pacotes instalados, conecte seu HD externo. Deverá aparecer algo similar nas mensagens de kernel (dmesg)
[864448.690000] usb 1-1: new high-speed USB device number 2 using ehci-platform
[864448.840000] scsi0 : usb-storage 1-1:1.0
[864449.850000] scsi 0:0:0:0: Direct-Access     WD       My Book 1110     1030 PQ: 0 ANSI: 4
[864449.860000] scsi 0:0:0:1: CD-ROM            WD       Virtual CD 1110  1030 PQ: 0 ANSI: 4
[864449.880000] scsi 0:0:0:2: Enclosure         WD       SES Device       1030 PQ: 0 ANSI: 4
[864449.890000] sd 0:0:0:0: [sda] 2928904192 512-byte logical blocks: (1.49 TB/1.36 TiB)
[864449.900000] sd 0:0:0:0: [sda] Write Protect is off
[864449.910000] sd 0:0:0:0: [sda] Mode Sense: 23 00 10 00
[864449.920000] sd 0:0:0:0: [sda] No Caching mode page present
[864449.920000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864449.940000] sd 0:0:0:0: [sda] No Caching mode page present
[864449.940000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864449.990000]  sda: sda1 sda2 < sda5 >
[864449.990000] sda: partition table partially beyond EOD, enabling native capacity
[864450.000000] sd 0:0:0:0: [sda] No Caching mode page present
[864450.010000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864450.020000]  sda: sda1 sda2 < sda5 >
[864450.020000] sda: partition table partially beyond EOD, truncated
[864450.060000] sd 0:0:0:0: [sda] No Caching mode page present
[864450.070000] sd 0:0:0:0: [sda] Assuming drive cache: write through
[864450.070000] sd 0:0:0:0: [sda] Attached SCSI disk
No meu caso, sda1 é uma partição FAT, sda2 uma extended que contém a partição sda5. Magicamente, o disco foi montado. O comando mount mostra a localização:
root@router:~# mount
(...)
/dev/sda5 on /mnt/sda5 type ext4 (rw,relatime,user_xattr,barrier=1,data=ordered)
O próprio OpenWRT montou o disco em /mnt/sda5. Só acessar o diretório e todo o conteúdo estará disponível.

Para HD, é bom desligá-los quando eles não forem necessários. Isto poupará suas partes móveis e aumentará a vida útil da unidade. O pacote luci-app-hd-idle realiza esta tarefa. A sua configuração é feita pela interface Web (luci) e é bem intuitivo. Basicamente, configura-se a unidade e o tempo sem atividade até que o disco seja desligado. Se alguma informação for necessária após ele ser desligado, o primeiro acesso apenas levará alguns segundos a mais do que o normal até o disco voltar a girar.

Até este ponto, a unidade estará somente "visível" para o roteador. Já é possível copiar arquivos de e para o roteador usando programas como o scp e o winscp mas nada muito amigável. O próximo passo será a instalação de um serviço de compartilhamento de arquivos (samba).

Até a próxima.