I have worked with debian packages for a few years, for the company I work at uses this method to deploy the software we do.
The official documentation is very detailed but it is difficult to find the things we want.
I will give here a few tips that I have learnt in the past years that often helps me a lot.
The folder where the package files (like preinst, postinst, etc) are:
fabio@perrella:~ $ ll /var/lib/dpkg/info/apache2.*
-rw-r--r-- 1 root root 6065 Jan 14 15:46 /var/lib/dpkg/info/apache2.conffiles
-rw-r--r-- 1 root root 7953 Jan 28 20:52 /var/lib/dpkg/info/apache2.list
-rw-r--r-- 1 root root 1464 Jan 14 15:47 /var/lib/dpkg/info/apache2.md5sums
-rwxr-xr-x 1 root root 13714 Jan 14 15:46 /var/lib/dpkg/info/apache2.postinst*
-rwxr-xr-x 1 root root 3905 Jan 14 15:46 /var/lib/dpkg/info/apache2.postrm*
-rwxr-xr-x 1 root root 4602 Jan 14 15:46 /var/lib/dpkg/info/apache2.preinst*
-rwxr-xr-x 1 root root 229 Jan 14 15:46 /var/lib/dpkg/info/apache2.prerm*
The folder where the last installed packages are:
/var/cache/apt/archives
How to configure the package to restart the service automatically when it is installed:
in debian/rules:
dh_installinit --restart-after-upgrade
This will replace the tag #DEBHELPER# in the file debian/postinst by a code to call the service restart.
Conffiles:
Put all configuration files into the file debian/conffiles, this will prevent the package to replace the server configuration files while installing a new version of the package. By doing this, it is not necessary to remove the configuration files from the package or add them as .sample files to the repository.
Do you have any useful tips? Please add a comment below!
Recentemente fizemos o roteiro "Volta ao Parque" na Chapada Diamantina oferecido pela agência Venturas, vou deixar aqui o resumo do que fizemos, o lugar é espetacular!
Primeiro, escolhemos como meio de tranporte ir de avião até Salvador e depois de ônibus até Lençois, que é uma das principais cidades na região da chapada com boa infraestrutura para receber turistas. Indo de ônibus pudemos economizar um bom dinheiro (60 reais contra uns 600 do avião na alta temporada), mas só recomendo pra quem tiver paciência e tempo, pois o trajeto é longo, 6h de viagem! Se a escolha for avião, ficar atento que só há viagens Salvador - Lençois às 5ª feiras e domingos.
Em Lençóis, ficamos na pousada Raio de Sol, apesar de ser bem simples, é confortavel, está bem localizada e tem um bom café da manhã, que é uma tradição das pousadas da região. Pra quem quiser um upgrade nas acomodações, recomendo a pousada Alcino Estalagem que fica logo ao lado e tem a fama de ter o melhor café da manhã do Brasil!
No 1º dia, chegamos a Lençóis por volta das 14h. Lá fizemos um passeio rápido nos Caldeirões do Serrano passando pelo centro histórico, dá uns 30min a pé da pousada (caminhada tranquila). O lugar é muito legal, com vários caldeirões que formam piscinas naturais e com pequenas quedas d'água.
Há várias agências de turismo pelo pequeno centro da cidade. Elas fazem a mediação entre turistas e guias da região.
Sempre contrate um guia local! A experiência será 10x mais gostosa com os causos, orientações e atenção prestados por eles. Nós tivemos o grande prazer de conhecer o Tiago (Rasta) - guia local com grande conhecimento do lugar, várias histórias para nos manter motivados e sempre com um sorriso no rosto, mesmo com o cansaço e calor do esforço das caminhadas.
No 2o dia pela manhã, visitamos o Sítio 1 na Serra das Paridas, que é um complexo arqueológico com desenhos e pinturas rupestres, bem legal!
Em seguida fomos para a Cachoeira do Mosquito. O acesso de carro é meio dificil, mas depois a trilha até a cachoeira é relativamente curta e fácil, bem legal tambem!
Tentamos achar algum diamantinho, mas não foi dessa vez...
O legal de pegar o pacote com a agência é que está incluso o traslado para todos os atrativos em um veículo 4x4. A maioria das estradas de terra são bem ruins e longas, eu não me arriscaria com um carro comum. Esse foi nosso carro:
Depois da cachoreira do Mosquito seguimos para o Morro do Pai Inácio (1240m) para vermos o pôr do sol, um belo lugar. A dica é levar um agasalho pois quando o sol vai embora a temperatura cai muito lá em cima!
No 3o dia, começamos visitando o Poço do Diabo. É um lugar bem legal, de fácil acesso (e por isso um pouco cheio), oferece algumas atrações como tirolesa e rapel.
Em seguida fomos para a gruta da Torrinha. Lá tem os guias especializados que fazem o tour pela gruta. Disseram que uma das trilhas dela tem 13km, nós fizemos uma que tem 1,3km. Eles oferecem capacete e lanterna. O passeio é bem legal, mas nao recomendo pra quem tem dor nas costas ou claustrofobia, pois passamos por alguns lugares bem apertados, mas vale a pena!
Nessa gruta, existe uma formação muito rara de flor de aragonita dentro da bolha de calcita dentre outras formações.
A formação que mais me chamou atenção foi essa abaixo, que parece uma miniatura dos arredores do Morro do Pai Inácio!
Em seguida fomos para Pratinha. É um lugar bonito e de fácil acesso, por isso fica bem cheio. Tem várias atrações nesse lugar, a Gruta Azul com águas cristalinas, a flutuação da Pratinha, onde é possível nadar na gruta escura com lanterna e a Prainha, que é como se fosse a praia da Chapada!
No final do 3o dia, fomos para o Vale do Capão. É uma cidade bem pequena e afastada. A estrada para chegar lá é bem acidentada, graças ao nosso 4x4 não tivemos problemas. Ficamos na Pousada do Capão, um lugar incrível, com uma bela vista, ótima comida, sauna, piscina natural, etc.
No 4o dia, o destino era a famosa Cachoreira da Fumaça. O trajeto até lá é de 6km de caminhada, sendo que os primeiros 2km são de subida bem forte, uma das mais difíceis da viagem. Mas todo o esforço compensa, pois a visão da cachoeira é de outro mundo, nunca vi nada igual!
Nessas caminhadas mais longas, recomendo usar boné (ou chapeu), camisa de manga comprida de tecido leve (tipo dryfit), calça, pois o sol pode castigar, é um maçarico! (nesse dia eu estava de manga curta, mas no dia seguinte aprendi!). Além disso levar uns 2L de agua por pessoa e lanches pois a caminhada é longa.
Lá no mirante, tem um senhor que quase sempre esta lá e vende um pastel de palmito de jaca - típico na região - recomendo muito experimentar, é muito bom!
Depois dessa bela caminhada, paramos no Riachinho para dar uma relaxada. A única coisa a que precisam atentar nesse lugar é que o solo é cheio de pedras e machuca o pé, é um lugar muito bom!
No próximo post eu comento sobre os outros dias...
Last week, at my job, we were trying to find the root problem that was killing one of our applications. It is a rails app running on Debian, and we had some clues about the problem:
- looking at New Relic errors, we saw many errors like "getaddrinfo: Name or service not known"
- looking at Unicorn logs, there were a lot of "too many open files" errors
It seemed the application was being killed by these errors.
We thought that the server may have some network problems, as this could explain the "Name or service not known" error which is an error that happens when some domain can't be resolved with DNS.
But after some research, we remembered this kind of "too many open files" error is related with the number of open files in the filesystem. It is possible to list all opened files using the command lsof. We ran this command, but the number was too little. It didn't look like the default limit of 1024 was being reached.
So we kept searching for some answer to our problem, and we found another way to list the current open files of a process using a command like this:
ls -la /proc/3591/fd
This command shows all the file descriptors related to a process (pid).
We ran this command to our process, and we noticed many file descriptors were not being listed due to permission constraints.
When we ran the same command with root, all the FDs were there listed. So we thought 'Lets try to run lsof with root to see if the result is different', and it was - a big number had appeared!
Running lsof, it is possible to filter the output using grep, so we could analyse why there were so many opened files.
After some analysis, and using a little of bash script, we ended up with this command:
#!/bin/bash FILE=$1 if [[ "$git_status" =~ On\ branch\ ([^[:space:]]+) ]]; then BRANCH_NAME=${BASH_REMATCH[1]} test "$branch" != master || branch=' ' else # Detached HEAD. (branch=HEAD is a faster alternative.) BRANCH_NAME="`git describe --all --contains --abbrev=4 HEAD 2> /dev/null || echo HEAD`" fi echo $1 if [ -n "$BRANCH_NAME" ] && [ "$BRANCH_NAME" != "master" ]; then sed -i.bak -e "1s/^/[$BRANCH_NAME] /" $FILE fi
- Salvar o arquivo e colocar permissão chmod 755
A partir desse ponto, todos os repositórios clonados e inicializados terão este hook, para os já existentes, precisa rodar o comando git init que carregará o hook global.