Compilados ambos Squid e start-stop-daemon, é hora de criar o pacote para Slackware. Para isso, acesse o diretório temporário para onde os arquivos de instalação foram copiados, logando-se como root antes:
$ su
password:
# cd /tmp/squid-slackware
Renomendo arquivos de configuração
Agora, acesse o subdiretório etc/squid e ajuste os nomes dos arquivos de configuração, alterando a extensão, de .conf para .conf.new. Esse procedimento é necessário para que, no caso de atualização do Squid, os arquivos de configuração já existentes não sejam sobrescritos pelos novos arquivos presentes no novo pacote:
# cd etc/squid
# for conf in *.conf ; do mv $conf{,.new}
Compactando as páginas de manual
Volte ao diretório raiz base e, então, compacte todas as páginas de manual, localizadas no subdiretório man/man8:
# cd ../../
# gzip -9 man/man8/*
Criando o script de controle de serviço
Agora, cesse o subdiretório etc e, então, crie o diretório rc.d, onde colocaremos o script de controle de serviço do Squid:
# cd etc
# mkdir rc.d
Abra, agora, em algum programa de gerenciamento de pacotes, como File-Roller (GNOME) ou Ark (KDE), o pacote Debian do Squid, para obter o script de controle de serviço. Após aberto o pacote, abra o arquivo data.tar.gz e, então, navegue até o diretório ./etc/init.d, selecione o arquivo squid e descompacte-o no seu diretório pessoal.
Agora, voltando para o terminal, mova o arquivo squid para o diretório rc.d recém-criado, mudando o nome do arquivo para rc.squid.new:
# mv /home/davidson/squid rc.d/rc.squid.new
Agora, edite o arquivo rc.squid.new, removendo a seguinte linha, que é desnecessária:
[ ! -f /etc/default/squid ] || . /etc/default/squid
Salve o arquivo e feche-o.
"Limpando" os binários
Em seguida, volte ao diretório base e, então, faça uma "limpeza" nos binários gerados, com o comando strip:
# cd ..
# for shared in `find . |
xargs file |
grep "shared object" |
grep ELF |
cut -f 1 -d :`
do
strip --strip-unneeded $shared
done
# for exe in `find . |
xargs file |
grep "executable" |
grep ELF |
cut -f 1 -d :`
do
strip --strip-unneeded $exe
done
# for current in `find . |
xargs file |
grep "current ar archive" |
cut -f 1 -d :`
do
strip --strip-debug $current
done
Criando o script de instalação
Feito isso, crie o diretório install, onde serão colocados os arquivos de instalação do pacote:
# mkdir install
Agora, crie e edite o arquivo doinst.sh, dentro do diretório install, que conterá os procedimentos a serem executados após a instalação do pacote:
# vim install/doinst.sh (substitua "vim" pelo editor de sua preferência)
Insira o seguinte conteúdo:
# Se já houver arquivos de configuração do Squid, eles são
# mantidos. Caso contrário, os arquivo .conf.new são
# renomeados para .conf
for FILE in cachemgr.conf mime.conf squid.conf ; do
OLD=etc/squid/$FILE
NEW=etc/squid/$FILE.new
if [ ! -f $OLD ] ; then
mv $NEW $OLD
elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ] ; then
rm $NEW
fi
done
# Cria o diretório de cache do Squid, se não existir
if [ ! -d var/spool/squid ] ; then
mkdir var/spool/squid
chown nobody.nogroup var/spool/squid
fi
# Cria os arquivos de log do Squid, se não existirem
for FILE in cache.log access.log store.log ; do
if [ ! -f var/log/squid/$FILE ] ; then
touch var/log/squid/$FILE
chown nobody.nogroup var/log/squid/$FILE
fi
done
# Verifica se o script de inicialização rc.squid já existe
OLD=etc/rc.d/rc.squid
NEW=etc/rc.d/rc.squid.new
if [ ! -f $OLD ] ; then
mv $NEW $OLD
elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ] ; then
rm $NEW
fi
# Se já existir, o novo script rc.squid.new é preservado
# para a consideração do administrador
# Verifica se existe uma entrada no rc.local para o script
# rc.squid. A entrada para o rc.squid será inserida ao final
# do arquivo
if ! grep rc.squid etc/rc.d/rc.local > /dev/null ; then
(
echo
echo "# Inicia o proxy Squid:"
echo "if [ -x /etc/rc.d/rc.squid ] ; then"
echo " . /etc/rc.d/rc.squid start"
echo "fi"
echo
) >> etc/rc.d/rc.local
fi
# Inicia o Squid, se possível
if [ "$PWD" = "/" ] ; then
if [ -x etc/rc.d/rc.squid ] ; then
if [ -f var/run/squid.pid ] ; then
etc/rc.d/rc.squid restart
elif pgrep squid > /dev/null ; then
etc/rc.d/rc.squid restart
else
etc/rc.d/rc.squid start
fi
else
chmod +x etc/rc.d/rc.squid
if [ -f var/run/squid.pid ] ; then
etc/rc.d/rc.squid restart
elif pgrep squid > /dev/null ; then
etc/rc.d/rc.squid restart
else
etc/rc.d/rc.squid start
fi
fi
fi
Salve o arquivo e feche-o. Esse script será executado após a instalação do pacote. Sua função é preservar os antigos arquivos de configuração do Squid, caso existam, e criar os diretórios e arquivos de log, caso não existam. Com isso, o Squid poderá ser iniciado sem nenhum erro. Ao final, o script checa se o pacote está sendo instalado na partição em uso e se o script rc.squid está com permissões de execução. Se sim, ele inicia ou reinicia o Squid automaticamete, conforme o caso.
Criando o arquivo de descrição do pacote
Agora, crie e edite o arquivo slack-desc, que conterá as informações sobre o pacote, exibidas no momento da instalação:
# vim install/slack-desc
Insira o seguinte conteúdo:
squid: Squid proxy-cache Web
squid:
squid: Squid é um proxy-cache Web completo, que suporta proxeamento
squid: e cacheamento dos protocolos HTTP, FTP e outras URL's,
squid: proxeamento de SSL, hierarquias de cache, ICP, HTCP, CARP,
squid: Cache Digests, cacheamento transparente, WCCP, controle
squid: de acesso extensivos, aceleração de servidor HTTP, SNMP
squid: e cacheamento de pesquisas de DNS
squid:
squid: Para mais informações, veja: http://www.squid-cache.org
squid:
Salve o arquivo e feche-o, e está feito.
Criando o pacote e instalando-o
Agora, basta criar o pacote com o comando makepkg:
# makepkg -c n -l n squid-2.5.14-i686-1.tgz
Cuidado com o nome do pacote. Ele deve ser formado da seguinte forma:
[nome]-[versão]-[arquitetura]-[revisão].tgz
Onde:
- [nome]: o nome do pacote. Nesse caso, "squid";
- [versão]: a versão do software. Nesse caso, é 2.5STABLE14 ou, de forma simplificada, 2.5.14;
- [arquitetura]: a arquitetura/processador para a qual o pacote foi compilado. Nesse caso, foi utilizado "i686", referente a processadores da família Pentium III e IV. Para processadores Pentium I e II, usa-se "i586". Para Duron e Athlon XP, use "k7". Essa informação não interfere em nada na funcionalidade do pacote, ela serve apenas para avisar para qual arquitetura de hardware o pacote foi compilado, pois, em alguns casos, pacotes compilados para i686 não funcionam em certos processadores, por exemplo.
- [revisão]: é a versão do pacote. Não confunda com versão do softwares. A versão do Squid é 2.5.14, mas a versão do pacote que você faz pela primeira vez é 1. Se fizer alguma alteração no pacote, a sua versão será 2, ainda que a versão do software continue sendo a mesma. É costume indicar também, nessa área, o autor do pacote. Em alguns pacotes meus eu coloco a revisão similar a "1bozo".
Pronto, estamos com o pacote criado. Agora, é só testar:
# upgradepkg --install-new squid-2.5.14-i686-1.tgz
Se você não tiver o Squid instalado, é provável que ele não funcione corretamente, visto que não haverá um arquivo squid.conf configurado de forma correta.