Servidor de Mídia com 128 MB de RAM
Aqui, vamos nós nesse novo desafio, criar um servidor de mídia para ser acessado por vários dispositivos, como Xbox, PS3, celular, Laptop, TV, etc. Vamos fazer stream de vídeos, fotos e áudio na rede com um computador limitado a 128 MB de RAM, Pentium-3 850Mhz e 20 GB de HD.
Parte 4: Configurações
Configurando Apache
O Apache é o servidor de páginas WEB que usaremos. Ele em si é leve, porém, se não for configurado bem em uma máquina com recursos limitados, ele pode dar dor de cabeça.As "dores" mais comuns, são:
- WSD (White Screen of Death) ou como é mais conhecido: "Falta de memória para o PHP".
- MySQL falhando ao iniciar ou tendo o processo morto pelo sistema.
- MySQL não consegue criar uma nova instância e retorna com o erro de Pthread 11. Por não conseguir criar uma nova instância o MySQL, decide abortar o pedido de acesso à base de dados.
Para evitar esse tipo de problema, vamos configurar o Apache mudando o arquivo /etc/Apache/conf/httpd.conf:
MaxSpareServers 5
MinSpareServers 1
StartServers 3
MinSpareServers 1
StartServers 3
Caso você queira fazer mais ajustes, cheque esse documento:
Verdade, eu estou te indicando a leitura do manual do Apache. :)
Infelizmente, não há uma tradução em Português desse manual ainda (até aonde eu sei, não há, pode ser que alguém, em algum canto da Internet, já traduziu.)
Configurando o MySQL
MySQL é uma base de dados que cada vez cresce em números. Sites com tráfico pesado, como Facebook, YouTube, Google, Wikipedia, etc, usam a base de dados MySQL porque, em si, ela não é pesada. Porém, quando você usa scripts malfeitos ou websites "prontos", cheios de scripts e templates, como Joomla! e WordPress, o MySQL pode facilmente ter 10 chamadas à base de dados em uma só página que é carregada.Vamos traduzir isso em MB: um RSS fazendo mais de 10 chamadas à base de dados vai produzir um documento de 35 KB, mas, para gerar esse simples documento, ele pode consumir 25 MB de RAM só em processamento de dados.
O que não é tão ruim, quando você tem um computador com bastante RAM. Agora, para o nosso experimento com 128 MB um RSS carregando 25% da memória, como fica o armazenamento para os outros programas? Então, vamos reduzir isso.
Esses parâmetros abaixo, são do meu /etc/mysql/my.cnf, se você quiser usar um exemplo já feito, pode encontrar na pasta /usr/share/doc/my-server-5.0/examples, no caso dos "filhos" do Debian. :)
Caso em sua distro não exista esses exemplos, copie o meu my.cnf:
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
skip-bdb
skip-innodb
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
#safe-updates
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M
[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
port = 3306
socket = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K
skip-bdb
skip-innodb
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
#safe-updates
[isamchk]
key_buffer = 8M
sort_buffer_size = 8M
[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M
[mysqlhotcopy]
interactive-timeout
Foi adicionado o seguinte skip-bdb e skip-innodb, assim, você não carrega o suporte para BSD DB ou InnoDB. Já que ambos são águas passadas, obsoletos, velhos, desnecessários para o nosso projeto.
key_buffer tem somente 16 K, o que já é mais que suficiente. key_buffer é um dos parâmetros mais importantes para as tabelas MyISAM; seria bom deixar com 1 MB, se você quer fazer um blog ou algo parecido, o que não é o nosso caso, então, deixe com 16 K.
A mesma coisa para o table_cache - 4 e muito pequeno para outro tipo de aplicação. Uma página do WordPress vai chamar 10, facilmente; e muito mais no caso do Drupal ou MediaWiki. Nosso projeto não vai carregar nada parecido com esse tipo de website.
Depois destes simples ajustes, o seu MySQL deve estar rodando com uma velocidade boa e carregando a memória com menos dados. Se você fazer o teste com o RSS, puxando a informação do MySQL, em vez de carregar com 25 MB, agora você vai ver que ele vai carregar com 5~6MB. Deixando assim, mais espaço na RAM para as outras aplicações.
Configurando o MediaTomb
Vamos iniciar com o MySQL. Precisamos criar uma base de dados para o MediaTomb.Assim, vamos digitar no terminal:
# mysql -u <usuario> -p
mysql> mysql -u root -p
mysql> CREATE DATABASE nome-da-base-de-dados;
mysql> CREATE DATABASE mediatomb;
mysql> GRANT ALL ON <database name>.* TO '<user name>'@'<hostname>' IDENTIFIED BY '<password>';
mysql> GRANT ALL ON mediatomb.* TO 'mediatomb'@'%' IDENTIFIED BY 'suasenha';
mysql> flush privileges;
mysql> quit;
# mysql [-u <username>] [-p] <database name> < <install prefix>/share/mediatomb/mysql.sql
mysql> mysql -u mediatomb -p mediatomb < /usr/share/mediatomb/mysql.sql
[digite a senha do MediaTomb]
mysql> mysql -u mediatomb -p mediatomb
[senha do MediaTomb, no meu exemplo "suasenha"]
mysql> show tables;
Se até aqui você não recebeu nenhuma mensagem de erro e o resultado desses comandos foram:
mt_autoscan
mt_cds_active_item
mt_cds_object
mt_internal_setting
Parabéns, você criou a base de dados para o MediaTomb no MySQL. Agora, vamos ativá-la no próprio MediaTomb.
Para sair do MySQL, digite:
mysql> quit;
Para ajustar a configuração, abra o seu editor ${diretório padrão da distro}/mediatomb/config.xml:
sudo nano /etc/mediatomb/config.xml
* Atenção: não copie e cole o código abaixo, leia o seu conf e ajuste como necessário. Vamos modificar onde existe e inserir onde não existe, os seguintes valores:
<protocolInfo extend="yes"/>
<ui enabled="yes" poll-interval="2" poll-when-idle="no" show-tooltips="yes"/>
<accounts enabled="yes" session-timeout="30"/>
<account user="name" password="password"/>
<storage caching="yes">
<sqlite enabled="no">
<mysql enabled="yes"/>
<username>mediatomb</username>
<password>suasenha</password>
<database>mediatomb</database>
<ffmpegthumbnailer enabled="no">
<map from="avi" to="video/divx"/>
<map from="ogg" to="audio/ogg"/>
<lastfm enabled="no">
<virtual-layout type="disabled">
<extension-mimetype ignore-unknown="yes" case-sensitive="no">
<transcoding enabled="no">
<treat mimetype="audio/ogg" as="ogg"/>
<ui enabled="yes" poll-interval="2" poll-when-idle="no" show-tooltips="yes"/>
<accounts enabled="yes" session-timeout="30"/>
<account user="name" password="password"/>
<storage caching="yes">
<sqlite enabled="no">
<mysql enabled="yes"/>
<username>mediatomb</username>
<password>suasenha</password>
<database>mediatomb</database>
<ffmpegthumbnailer enabled="no">
<map from="avi" to="video/divx"/>
<map from="ogg" to="audio/ogg"/>
<lastfm enabled="no">
<virtual-layout type="disabled">
<extension-mimetype ignore-unknown="yes" case-sensitive="no">
<transcoding enabled="no">
<treat mimetype="audio/ogg" as="ogg"/>
Se tem algum outro parâmetro não mencionado aqui, deixe como está.
Pronto. Feita essas alterações, reinicie o MediaTomb:
sudo /etc/init.d/mediatomb restart
Tendo reiniciado com sucesso, abra o seu navegador em:
http://localhost:49152
Ou:
http://numero_do_ip:49152
Ótimo artigo. À medida em que lia, já esquematizava minha instalação aqui.
Grato pela ideia, vou poder guardar as pilhas de cds e dvds (acho até que vou digitalizar alguns VHSs familiares).
Só não tenho um Nobo/Lap "Véio".
Mesmo assim vou montar numa VB e depois que arrumar
um hardware (Lap ou Desk) passo para ele.
Vou seguir os mesmos passos usando o Debian.
Dica para o config do Apache (roda assim em 2 servers de produção):
MaxSpareServers 3
MinSpareServers 1
StartServers 1
Essa config atende um escritório com 8 estações.
Quanto aos aplicativos clientes pretendo utilizar tambem o Audacious e o Kaffeine.
Acredito que voce tenha despendido de 2 a 3 semanas de tempo no seu projeto.
Na medida em que o tempo me permitir passarei os resultados, penso que demorarei uma ou duas semanas.
Abraço