Mês: novembro 2014

Configurando uma Wiki num Debian Linux

Introdução

O objetivo deste post é explicar como subir uma nova instância de uma Wiki (mesma ferramenta da Wikipedia) num ambiente Linux/Debian. Como eu já fiz isso várias vezes e toda vez esqueço algum detalhe que me faz perder tempo, resolvi escrever esse post.

É possível subir instâncias da Wiki em Windows também, mas acredito que em Linux seja bem mais simples. Todos os softwares usados aqui são Open Source.

Particularmente, acho essa ferramenta espetacular para criar bases de conhecimento em qualquer empresa. A sintaxe no começo pode parecer confusa, mas uma vez que você se acostuma com ela, não a troca por nada. Tem o mesmo esforço de escrever um arquivo texto, com a possibilidade de ter formatação, links, edição colaborativa, controle de versão entre outras coisas.

O nível de segurança previsto para essa instalação é para uma intranet. Se você quer colocar uma wiki dessas na internet, deve se preocupar com várias outras questões de segurança.

Download do Debian

O primeiro passo é fazer o download da sua imagem de Debian favorita. No meu caso, usarei o Debian 7 64 Bits (https://www.debian.org/distrib/netinst, plataforma amd64).

Instalação do Debian 64

Siga os passos na tela. Não é necessário instalar a interface gráfica (o que torna a instalação muito mais leve).

Instalação da Wiki

Se você não habilitou por default o servidor ssh na sua máquina Linux, é uma boa idéia fazê-lo. É bem fácil e relativamente seguro acessar máquinas dessa maneira, mesmo vindo de uma máquina windows ou outra máquina unix.

No Windows, o cliente ssh mais popular é o PuTTY. Se você não habilitou o seu servidor ssh na sua máquina linux, basta instalar através do apt-get:

apt-get install ssh

Para descobrir o IP da sua nova máquina linux:

ip addr

Existe um método mais avançado de autenticação com SSH usando chaves pública e privada. Não é meu objetivo abordar esse método aqui, nem fornecer informações exaustivas sobre como configurar SSH.

Próximo passo é instalar os pacotes necessários para subir a MediaWiki. Como é baseado em php, você terá que instalar php, apache e outras coisas. É possível instalar em bancos de dados diferentes ou servidores web diferentes. Vou pelo que é mais comum: php e mysql. Você pode continuar absolutamente tudo dentro de uma sessão ssh, logado como root.

O primeiro passo, export DEBIAN_FRONTEND=noninteractive serve para evitar que várias configurações sejam solicitadas via terminal. Explicarei quais arquivos editar posteriormente.

export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install apache2 -y
apt-get install php5 -y
apt-get install php5-intl -y
apt-get install php5-mysql -y
apt-get install php5-mysqlnd -y
apt-get install mysql-server -y
apt-get install php-pear -y
apt-get install php-apc -y

Se você não definiu uma senha para o usuário root do mysql, você precisará definir. Use o seguinte comando:

mysql -u root -e "set password = password('novasenha')"

Desconheço um empacotamento específico para Debian para a MediaWiki. Por isso sugiro usar os seguintes comandos para baixar e descompactar:

mkdir /root/temp
wget https://releases.wikimedia.org/mediawiki/1.23/mediawiki-1.23.6.tar.gz /root/temp
tar -zxf /root/temp/mediawiki-1.23.6.tar.gz --directory=/root/temp

Agora, para copiar os arquivos para o diretório de publicação do apache, excluir o index.html default do apache e dar acesso para a pasta de imagens:

rm /var/www/index.html
cp /root/temp/mediawiki-1.23.6/* /var/www -r
chmod 777 /var/www/images

Agora, usando um browser navegue na nova wiki: http://seuenderecoip

Você cairá nas páginas de setup da WikiMedia. Daqui em diante é tudo muito simples, uma espécie de next/next/finish. Algumas informações sobre o host do seu servidor mysql serão solicitadas (neste caso, mesma máquina e a senha do usuário root que você mesmo definiu).

No final ele pergunta algumas questões adicionais ou se você está entediado. Se você seguir para as questões adicionais, tem algumas coisas interessantes como:

  • User rights profile: Aqui você determina se quer uma wiki fechada ou aberta. Para a maioria das intranets, a opção “Account creation required” é interessante. Qualquer um pode criar uma conta, mas precisa de uma para editar. Isso pode ser interessante para manter um bom histórico de alterações nas páginas.
  • Extensions: SyntaxHighlight_Geshi é bem interessante para “pintar” trechos de código em wiki.
  • Enable file uploads também é bem interessante

Após terminar de configurar tudo, a Wiki gera um LocalSettings.php para você. Você precisa colocar esse arquivo no /var/www da sua máquina remota. Se você está numa máquina Windows controlando um host linux, pode ser um pouco complicado isso. Algumas coisas que podem te ajudar são: WinSCP ou se você tem um Git Bash na sua máquina ou um cygwin, usar:

scp /caminho/para/seu/LocalSettings.php root@seuipremoto:/var/www

Ao acessar novamente sua nova wiki por http, ela estará funcionando (assim espero).

Backup

Para fazer o backup das wiki’s, você precisa se atentar a duas coisas:

  • Dump da sua base mysql
  • Imagens

Para fazer o dump do mysql:

mysqldump -u root -psuasenhado seudatabasegeralmentemy_wiki > /algum/diretorio/temporario/seu_db.dump

Para compactar o dump e suas imagens:

tar -cvpzf /local/destino/do/seu/arquivo/seubackup.tar.gz /var/www/images /local/do/seu_db.dump

Para colocar seu backup no cron, veja /etc/crontab. O jeito mais simples é colocar um link simbólico (ver comando ln) em /etc/cron.daily. O horário que o script será executado depende do que está configurado em /etc/crontab.

Restore

Para descompactar seu backup:

tar -zxf /seu/arquivo/tar.gz

Para importar o dump no mysql (o database precisa ser criado previamente)

/usr/bin/mysql -u root -psuasenha seudatabase < /caminho/para/seu_db.dump

As imagens, é só copiar de volta no diretório.

Anúncios

Sobre a relação entre metodologia ágil e morar fora do país

Recentemente, me vi diante de um processo de mudar de país. Quando esta idéia começou a se tornar possível, me vi, da noite para o dia com uma infinidade de coisas para resolver, num tempo muito curto e coisas que não tinha a menor idéia de como resolver. Como lidar com a saudade, pedir demissão do emprego, decidir o que eu vou fazer com o cachorro, decidir o que levar, desmontar a casa, passar procuração, resolver visto, fazer um planejamento financeiro, reservar vôo, tirar carteira de motorista internacional, ver onde ficar temporariamente até alugar uma casa, alugar uma casa em outro país, vender o carro, cancelar contas de prestadores de serviços (água, luz, internet, TV), fazer despedidas para os amigos e família e sai lá quantas outras coisas.

É muito difícil descrever como é essa sensação. Parece que você caiu de pára-quedas no meio de uma guerra.

Se nesse momento, eu tentasse resolver de uma vez só todos os problemas, provavelmente desistiria de tudo. Seria muito mais cômodo deixar tudo como estava. Mudar era um processo cheio de incertezas, riscos e custos.

Como um bom geek, resolvi atacar esses problemas como um projeto. Fui no visualstudio.com, montei meu projeto e comecei a organizar um backlog. Primeiro as estórias (cada uma das coisas que relacionei acima, tratei como uma história pois tinham objetivos e entregáveis bem definidos) depois a prioridade. O que é mais importante e o que tem maior risco primeiro. Depois quebrei o backlog em tarefas, numa idéia de entender o que precisava fazer para atingir aquele objetivo.

Mesmo nos casos onde não tinha a menor idéia de como resolver, como: tirar carteira de motorista internacional, lançava as atividades possíveis como “entender o processo de tirar carteira de motorista internacional”. Coisas como “tirar o visto”, lançava os formulários que tinha que preencher, os documentos que tinha que providenciar, as perguntas que tinha que fazer e as incertezas que tinha que eliminar.

Quebrei a complexidade das coisas definindo sprints. Criei uma primeira sprint com as coisas prioritárias para tornavam o processo viáveis. Nessa sprint entraram: visto, cachorro, pedir demissão e vender carro.

Depois fechei uma segunda sprint com as coisas que precisava viabilizar no processo da mudança. Casa, despedidas, onde ficar temporariamente, vôo.

Por último, deixei as coisas que só poderia resolver quando chegasse no outro país como: carro (se ia querer ou não) e alugar casa

O que é interessante é que a partir do momento que você comecei a definir objetivos menores para atingir um objetivo maior, definir atividades concretas e priorizar, a confusão mental decorrente de toda a incerteza existente no processo começou a ser eliminada. Toda a energia que era gasta com ansiedade e dúvida, passou a ser gasta em resolver de fato os problemas. O simples exercício de tomar notas, tirar as coisas da cabeça e torná-las tangíveis num backlog, abriu o espaço necessário para encontrar soluções.

O processo de quebrar em sprints me ajudava a manter o foco. De nada adiantava eu investir esforço no que estava na 2a ou 3a sprint sem resolver os problemas da primeiro. Isso me ajudava a lidar com a procrastinação. Aquelas coisas importantes, porém chatas de resolver, ficavam evidentes.

Isso foi determinante para viabilizar o objetivo de mudar para o exterior. A medida que eu atacava os problemas conforme a prioridade definida e encontrava as próximas atividades para as coisas que não sabia de antemão, mais aprendia sobre o processo e mantinha o controle dos próximos passos. Isso foi gerando um círculo virtuoso.

Em alguns meses, pouco a pouco, todos os obstáculos foram removidos. Quando menos percebi, estava dentro do avião pronto para recomeçar do outro lado do oceano. Meus agradecimentos ao mindset ágil por essa conquista.

E qual a relação de mudar para fora do país com metodologias ágeis no contexto de desenvolvimento de software?

Todo projeto de fazer um novo software é cheio de incertezas. Você precisa entregar algo que não sabe o que é, que provavelmente nunca foi feito antes, com tecnologias que você não conhece direito e com pessoas que nunca trabalhou antes. O primeiro passo é reconhecer claramente tudo isso. Saber o que fazer é provavelmente cerca de 50% do processo.

Quando você encara isso de uma maneira direta, sincera e honesta, move seu cérebro no sentido da solução. Sua cabeça foca em qual é a melhor alternativa que tem em mãos para atacar cada um desses objetivos. Se você simplesmente tentar prever todas as variáveis possíveis até o final do projeto, vai gastar muito mais energia que possui e provavelmente jogar a toalha no meio do caminho. Vai gastar tanto tempo tentando montar um plano infalível que vai acabar não executando nada deste plano por falta de tempo.

Vai ficar o tempo inteiro tentando fazer a realidade se encaixar no seu plano e não planejar de acordo com a as possibilidades existentes.

No final das contas, acho que é isso que as metodologias ágeis me ensinaram: como lidar com incertezas com naturalidade.

Sobre morar e trabalhar no exterior

Pessoal,

Recentemente, comecei uma nova oportunidade profissional, agora em outro país.

Para não misturar assuntos desse blog (profissional, para desenvolvedores) com outros assuntos, criei um blog separado, o “4 malas e o mundo” (4malas.com.br) para compartilhar um pouco das outras experiências de viver aqui (na Inglaterra).

O primeiro post: Como arrumar emprego na Inglaterra já é um que é interessante para os dois blogs. Terão vários cross-posts.

Caso interesse, apareçam por lá! Aproveitem e cliquem bastante nos Ad’s do outro blog para me ajudar a financiar a empreitada!

Abraço,

Eric