HTML5 e UTF8

A partir do php-5.6.8, que ficou disponível no Slackware a 21 de abril de 2015, os ficheiros de configuração deixaram de estar em /etc/httpd/ e mudaram para as diretorias /etc, /etc/php.d, e /etc/php-fpm.d.

Em particular, o php.ini passou para /etc/php.ini. Por causa disso, o PHP deixou de ler as configurações que estavam no ficheiro antigo, nomeadamente as configurações da timezone. Na altura pensei que o PHP não confiava nas definições de TIMEZONE do sistema (apesar de poderem estar bem configuradas no php.ini) e obrigava a que todos os programas que faziam uso de funções de data/hora definissem previamente a zona de tempo:

date_default_timezone_set("Europe/Lisbon");

Mas provavelmente basta editar o novo php.ini e adicionar a timezone:

[Date]
date.timezone = “Europe/Lisbon”

Por outro lado, foi necessário converter todos os ficheiros HTML e PHP, de ISO-8859-1 para UTF-8. Em alguns projetos antigos, tenho mais que 300 ficheiros e é impraticável alterá-los todos manualmente. Felizmente, em Linux é possível fazer essas conversões de uma só vez:

find . -name "*.php" -exec sh -c "iconv -f ISO-8859-1 -t UTF-8 {} > {}.utf8"  \; -exec mv "{}".utf8 "{}" \;

find . -name "*.html" -exec sh -c "iconv -f ISO-8859-1 -t UTF-8 {} > {}.utf8"  \; -exec mv "{}".utf8 "{}" \;

O maior ficheiro do disco

Eis dois comandos de Linux em consola para descobrir quais os dez maiores ficheiros e as dez maiores diretorias. (sacados do site superuser)

# To find the largest 10 files (linux/bash):
find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

# To find the largest 10 directories:
find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

# Only difference is -type {d:f}

A minha intenção é aprender um pouco mais sobre comandos do bash e depois explicar melhor estas instruções; mas, por agora, ficam aqui as instruções, pela utilidade imediata.

Limpar o BOM

Fica aqui a solução que uso mais comummente, para não andar sempre à procura dela pelos históricos das máquinas. Serve para limpar o BOM dos ficheiro UTF-8 criados pelo Notepad do Windows e que são um lixo que só atrapalha as aplicações Web.

find . -depth -name "*.php" -exec sed -i 's///g' {} \;

imap

Neste último upgrade do sistema, atualizei o ficheiro inetd.conf e fiquei sem imap.

Por omissão, a linha seguinte vem comentada no ficheiro /etc/inetd.conf e é necessário descomentá-la.

imap2   stream  tcp     nowait  root    /usr/sbin/tcpd  imapd

Depois é necessário reiniciar o serviço:

/etc/rc.d/rc.inetd restart

Kernel 4.4.0

Estou a atualizar as máquinas para o kernel 4.4.0.

Não esquecer que a nova configuração do SSHD não permite o acesso de clientes à conta “root”. Para permitir, é necessário, antes do último reboot, colocar a linha seguinte no ficheiro /etc/ssh/sshd_config: PermitRootLogin yes
Ou então apagar o ficheiro /etc/ssh/sshd_config.new antes de fazer o upgrade.
Ou, sempre que o SSHD é atualizado, não fazer o overwrite desse ficheiro.

Aparentemente, quando executo o último comando para a atualização do Slackware-current (slackpkg clean-system), o Slackware desinstala o Java – tanto o jre, como o jdk – instalados a partir dos pacotes que eu criei. Nalgumas máquinas isso pode ser um problema, como no Stat.Cool.

No fim vou ter que reiniciar os hosts das máquinas virtuais com os comandos que usei das últimas vezes. Estes comandos são necessários para recompilar o VirtualBox para a nova versão do Kernel do Linux.

cd /root
bat/vboxes stop
cd /usr/local/
VBoxManage extpack uninstall "Oracle VM VirtualBox Extension Pack"
reboot
exit
cd /usr/local/
chmod +x ./VirtualBox-5.0.12-104815-Linux_amd64.run
./VirtualBox-5.0.12-104815-Linux_amd64.run
VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack
cd -
bat/vboxes start

O ficheiro bat/vboxes é um ficheiro de comandos que criei para gerir as máquinas virtuais do VirtualBox.

Entretanto, se alguma das máquinas falhar, posso recuperá-la da mesma forma que já aqui foi documentada antes.

Reiniciar a máquina virtual, ligando ao leitor de CD um ISO com a última versão do sistema operativo. Depois de arrancar e escolher o layout do teclado, executar os comandos seguintes.

mount /dev/sda2 /mnt
mount -t proc proc /mnt/proc (this was the magic step)
chroot /mnt
cd /boot
mkinitrd -c -k 4.4.0 -m ext3
# No ficheiro /etc/lilo.conf colocar a linha
initrd = /boot/initrd.gz
# no fim do ficheiro, logo após a linha
root = /dev/sda2
# depois, executar os comandos:
lilo
reboot

Quando o slackpkg pendura

Eis a lista de comandos que utilizo no Slackware para fazer update das minhas máquinas, a partir de um mirror que tenho e que é atualizado diariamente.

slackpkg update
slackpkg update gpg
slackpkg install-new
slackpkg upgrade-all
slackpkg clean-system

De vez em quando, e ainda não percebi porquê, o slackpkg pendura. A máquina que estava a ser atualizada deixa de responder. Não sei se é por fazer muitas atualizações em simultâneo, todas a ler no mesmo mirror, se é demasiado peso na rede a carregar os pacotes para as atualizações… Duvido que a causa seja uma destas, mas ainda não consegui descobrir a origem dos problemas.

Algumas vezes tenho que mandar a máquina abaixo, embora nem sempre. Mas uma consequência chata destes penduranços é que os pacotes que estavam a ser atualizados são considerados instalados, apesar de não estarem. Ainda demorei algum tempo a encontrar solução para este problema, por isso fica aqui para consulta futura.

cd /var/lib/slackpkg/
rm ChangeLog.txt

E depois já posso recomeçar os updates.