Encontrando arquivos pesados no linux

Se acabou inesperadamente acabou o espaço na sua hospedagem, você pode usar a dica abaixo para localizar os arquivos mais pesados e cuidadosamente dar um jeito neles.

find . -size +20M -exec du -h {} \;

O comando acima vai te mostrar todos os arquivos acima de 20 Mb. Ele funcionaria apenas até o 20M, mas utilizando o -exec para chamar o du você terá informações sobre o peso de cada um desses arquivos encontrados.

find . -size +20M

👆 Assim mostra só a lista dos arquivos, sem informação de peso.

E no lugar daquele ponto você pode selecionar um outro local para escanear. O ponto representa o local atual, outro uso bem comum seria utilizar esse comando para encontrar arquivos pesados no seu site.

Seria assim:

find /var/www/ -size +2M -exec du -h {} \;

Esse comando vai te mostrar os arquivos com mais do que 2 Mb na pasta do seu site, arquivos maiores do que isso só se for um vídeo. Do contrário você deve dar um jeito neles, seja comprimindo ou refatorando.

Instalando o Apache2 (com mod rewrite), PHP7, MariaDB (esqueça o MySQL) e PHPMyAdmin no Ubuntu

A long time ago fiz um tutorial ensinando a realizar a instalação conjunto, também conhecido como LAMP (Linux, Apache, Mysql, PHP) no Ubuntu. Hoje volto para ensinar a instalar as versões mais recentes para ter seu Web Server mais seguro e com melhor desempenho.

Além dos itens já mencionados também instalaremos e ativaremos alguns modulos do Apache como o módulo de rewrite para URLs amigáveis e bibliotecas do PHP que são exigidos em diversos frameworks e soluções como o Magento por exemplo.

Preparando o sistema

Os primeiros passos todos sabem: obter permissões root e atualizar a lista de pacotes.

Pegando root, digite o comando abaixo e informe sua senha quando ele pedir:

sudo su

Atualizando a lista de pacotes:

apt-get update

Em seguida vamos instalar o apache2

apt-get install -y apache2

Vamos ativar o módulo de rewrite:

a2enmod rewrite

Agora vamos instalar o PHP

apt-get install -y php7.2

Vamos aproveitar o momento para instalar aqueles módulos que falei mais cedo.

apt-get install -y libapache2-mod-php7.2 php-memcached php-pear php7.2-curl php7.2-dev php7.2-gd php7.2-json php7.2-mbstring php7.2-mysql php7.2-sqlite3 php7.2-xml php7.2-zip

Agora vamos instalar o MariaDB

Essa é uma distribuição baseada no MySQL, porém com mais atualizações. Funciona do mesmo modo que o MySQL, não notei nenhuma diferença em sintaxes e outras funcionalidades. Pelo que pesquisei entendi que ele recebe mais atualizações de segurança e tem um desempenho melhor. Por que não?

apt-get install -y mariadb-server mariadb-client

Agora, vamos dar um pouco de segurança pra instalação do MariaDB, pois, assim como o MySQL, ela vem com algumas configurações padrão que são perigosas.

mysql_secure_installation

Falta pouco agora, vamos rodar o MySQL para poder instalar o PhpMyAdmin que por sua vez cria uma tabela e um usuário, por isso precisamos do serviço rodando.

service mysql start

Agora vamos instalar o PHPMyAdmin

apt-get install -y phpmyadmin

Por último, basta rodar o apache2 para que tudo esteja funcionando.

service apache2 start

O diretório padrão onde você vai colocar seus arquivos é:

[code]/var/www/html/[/code]

Observações

O Magento até a versão 1.9.3.8 não é compatível com o PHP7, então prefira utilizar este tutorial.

Da versão 1.9.4.0 em diante foi adicionado o suporte ao PHP7, então tudo ok 👍

É isso.

Instalando mCrypt no PHP 7.2 [Ubuntu Server]

A extensão mcrypt é uma interface para a biblioteca de criptografia mcrypt. Esta extensão é útil para permitir que o código PHP usando o mcrypt seja executado no PHP 7.2+.

O principal problema com a extensão mcrypt é que ela é baseada no libmcrypt que não foi desenvolvido desde o seu upstream em 2007. Assim, já faz mais e 10 anos, mesmo que a biblioteca ainda seja usada. No entanto, sem o desenvolvimento adequado e biblioteca tornou-se mal vista por muitos administradores de sistema.

Devido ao fim do desenvolvimento da extensão mcrypt, a extensão também foi removida do PHP 7.2 e movida para um repositório não oficial do PECL. No entanto, você ainda pode encontrar a extensão mcrypt no PHP 5.4 até o PHP 7.1. A chegada do PHP 7.2 foi anunciada, mas não conterá a extensão mcrypt. Para o PHP 7.2+, o PHP usa libsodium como uma biblioteca de criptografia.

Para instalar esta extensão no PHP 7.2, execute os seguintes comandos como o usuário root do seu servidor:

Verifique a versão php e pecl

php -v
pecl version

Se o seu php não for 7.2, use o comando /usr/bin/php7.2 em vez de php.

Instalando a extensão mcrypt

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install libmcrypt-dev
sudo pecl install mcrypt-1.0.1

Quando ver essa pergunta:

libmcrypt prefix? [autodetect] :

Apenas pressione [enter]

Após o sucesso da instalação do mcrypt pelo pecl, você deve adicionar a extensão mcrypt.so ao php.ini.

O fim da instalação vai mostrar algo como isso:

[code=”bash]…
Build process completed successfully
Installing ‘/usr/lib/php/20170718/mcrypt.so’ —-> esse é o caminho da extensão mcrypt
install ok: channel://pecl.php.net/mcrypt-1.0.1
configuration option “php_ini” is not set to php.ini location
You should add “extension=mcrypt.so” to php.ini[/code]

Copie o caminho da extensão e adicione à configuração cli e apache2 php.ini com o comando abaixo. Se o caminho for diferente no seu sistema você deve corrigir o código abaixo antes de executar.

[code=”bash]sudo bash -c “echo extension=/usr/lib/php/20170718/mcrypt.so > /etc/php/7.2/cli/conf.d/mcrypt.ini”
sudo bash -c “echo extension=/usr/lib/php/20170718/mcrypt.so > /etc/php/7.2/apache2/conf.d/mcrypt.ini”
[/code]

Verifique se a extensão foi instalada

Rode o comando:

php -i | grep "mcrypt"

A saída deve ser assim:

[code=”bash]/etc/php/7.2/cli/conf.d/mcrypt.ini
Registered Stream Filters => zlib.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, convert.iconv.*, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value[/code]

Solução de problemas

Apareceu o erro abaixo:

[code=”bash]ERROR: ‘phpize’ failed [/code]

Você deve instalar o php7.2-dev

[code=”bash]apt-get install php7.2-dev[/code]

[Linux] Migrando e-mails de um servidor para outro utilizando imap

Passo 1 – Instalar pré-requisitos

Vamos começar com a instalação de pacotes obrigatórios para o imapsync. Aqui está uma longa lista de bibliotecas Perl e outros pacotes para instalar em seu sistema.

sudo apt-get install git rcs make makepasswd cpanminus

sudo apt-get install libauthen-ntlm-perl libclass-load-perl libcrypt-ssleay-perl liburi-perl libdata-uniqid-perl libdigest-hmac-perl libdist-checkconflicts-perl libfile-copy-recursive-perl libio-compress-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libmail-imapclient-perl libmodule-scandeps-perl libnet-ssleay-perl libpar-packer-perl libreadonly-perl libsys-meminfo-perl libterm-readkey-perl libtest-fatal-perl libtest-mock-guard-perl libtest-pod-perl libtest-requires-perl libtest-simple-perl libunicode-string-perl

Além disso, instale os módulos Python necessários usando o CPAN no seu sistema.

sudo cpanm Mail::IMAPClient JSON::WebToken Test::MockObject 
sudo cpanm Unicode::String Data::Uniqid

Passo 2 – Instalar Imapsync

Depois de concluir a instalação dos pacotes necessários. Baixe o código mais recente do imapsync do repositório oficial do git em seu sistema local.

git clone https://github.com/imapsync/imapsync.git

Navegue até o repositório recém-clonado e instale-o com os seguintes comandos em seu sistema.

cd imapsync
mkdir -p dist
sudo make install

Nesse estágio, o sistema está pronto para migrar todos os dados de uma conta de e-mail para outras contas de e-mail usando o IMAP.

Passo 3 – Transferindo os e-mails

Então você está pronto para a migração. Antes da migração, verifique se ambas as contas têm o IMAP habilitado e acessível a partir do seu sistema. Depois disso, use a seguinte sintaxe de comando.

imapsync --host1 imap.dominio-do-email.com   --user1 email_origem@gmail.com --password1 SenhaDaOrigem123 --ssl1 --host2 imap.dominio-do-email.com --user2 email_destino@gmail.com --password2 SenhaDoDestino123   --ssl2

O comando demorará muito tempo de acordo com o tamanho da sua Caixa de Correio de origem. Depois de concluir todo o processo, você verá uma longa lista de saída. Verifique a saída para descobrir se ocorreu algum erro durante a transferência. Abaixo está a pequena parte do resultado.

Extra

Aqui um script shell pra facilitar a migração de várias caixas de e-mail.

@ = %40

--f1f2 FOLDER1=PASTA1

#!/bin/bash
PREFIXO=$1
SERVIDOR_ORIGEM='imap.dominio-do-email.com.br'
USUARIO_ORIGEM=$PREFIXO'@dominio-do-email.com.br'
PASSWORD_ORIGEM='temporaria@123'

SERVIDOR_DESTINO='mail.ita.locamail.com.br'
USUARIO_DESTINO=$PREFIXO'@dominio-do-email.com.br'
PASSWORD_DESTINO='Temporaria@123'

imapsync --nosyncacls --subscribe --syncinternaldates --f1f2 INBOX.Sent=INBOX.enviadas --f1f2 INBOX.Spam=INBOX.lixo --f1f2 INBOX.Drafts=INBOX.rascunho --host1 $SERVIDOR_ORIGEM --user1 $USUARIO_ORIGEM --password1 $PASSWORD_ORIGEM --tls1 --host2 $SERVIDOR_DESTINO --user2 $USUARIO_DESTINO --password2 $PASSWORD_DESTINO --tls2[/bash]
<!-- /wp:shortcode -->

<!-- wp:paragraph -->
<p>Esse script leva em conta que a senha dos e-mails é sempre a mesma. Como você vai precisar saber a senha de origem e destino, é mais prático deixar todos os e-mails com a mesma senha antes de começar a migração, vai te poupar algum tempo.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>Salve o script com o nome <strong>migrar</strong> e execute da seguinte forma:</p>
<!-- /wp:paragraph -->

<!-- wp:shortcode -->
[code="bash"]./migrar contato

Com isso ele teria migrado a caixa contato@dominio-do-email.com.br

Nesse script eu migrei caixas com mesmo nome e mesmo domínio, porém de uma hospedagem para outra, então só difere o host, mas se você precisa mudar de domínio por exemplo, você pode ajustar o script.

[Linux] Deletando uma pasta com muitos, muitos arquivos

As vezes nos deparamos com uma situação onde temos milhares de arquivos em uma pasta e precisamos elimina-los.

Estive em uma situação como essa quando em uma loja feita em Magento a pasta var/sessions estava lotada de arquivos e prejudicando a performance da loja.

Antes de configurar uma rotina no cron para eliminar arquivos mais velhos do que certo período eu precisei limpar ela e o comando rm não estava me ajudando

 rsync -r --delete ./pastaVazia/ ./pastaLotada

O comando acima copia a estrutura e conteúdo de uma pasta A para a pasta B. Então se você criar uma pasta vazia para A, você terá a pasta B vazia após o comando terminar sua tarefa.

O rsync é muito útil também para publicação de pequenos sites, certos tipos de backup e o que mais a imaginação permitir. Vale a pena conferir e brincar um pouco com ele.

Instalando o PHP 5.6 no Ubuntu 16.04 (Xenial)

Lembrando que é necessário estar como super usuário para conseguir realizar as ações abaixo.

sudo su

Depois adicionar a dependência do PHP 5.6 e atualizar a lista de pacotes:

add-apt-repository ppa:ondrej/php
apt-get -y update

Então instalamos o Apache e MariaDB (esqueça o MySQL)

apt-get install -y apache2
apt-get install -y mariadb-server mariadb-client

Nesse ponto precisamos startar o MySQL

service mysql start
mysql_secure_installation

Então instalamos o PHP 5.6 e alguns pacotes essenciais:

apt-get install -y php5.6
apt-get install -y php5.6-mcrypt php5.6-mbstring php5.6-cli php5.6-mysql php5.6-gd php5.6-curl php5.6-intl php5.6-xsl php5.6-zip php5.6-soap
apt-get install -y curl libcurl3 libcurl3-dev

Vamos instalar também o PHPMyAdmin para facilitar nossa vida.

 apt-get install -y phpmyadmin 

Após isso realizamos algumas configurações básicas como habilitar o rewrite necessário para a URL amigável e o mCrypt, uma biblioteca que adiciona segurança (utilizado pelo Magento).

a2enmod rewrite
phpenmod mcrypt

E por fim reiniciamos o apache:

service apache2 restart

Fim.