Dicas:
Mais uma dica para inscrição na Arena de Programação. Há mais de 20 vagas !
Arena de Programação: Mantenedores do GoboLinux divulgam a Primeira Dica
Este ano a inscrição para a Arena de Programação do FISL consistirá na solução de até 3 problemas (quanto mais você fizer, maiores sua chances), 2 problemas de porte pequeno e 1 de porte médio. Os problemas serão fornecidos pelo projeto GoboLinux (http://gobolinux.org), que irá escolher tarefas e bugs reais que serão corrigidos pelas melhores submissões.
O projeto GoboLinux nasceu no Rio Grande do Sul, em 2002, sendo apresentado ao mundo através do FISL daquele mesmo ano. Sua proposta difere de outras distribuições GNU/Linux pela hierarquia de diretórios usada, que dispensa o uso de gerenciadores de pacote como o RPM ou o APT. Ao invés de ter partes de um programa copiados para o /usr/bin, outras para o /etc, e ainda outras em /usr/share/algum/lugar, cada programa mantém sua própria estrutura de diretórios, isolada dos outros e permitindo que a verificação dos programas instalados e seus conteúdos seja feita de modo simples e intuitivo.
Os problemas escolhidos pela equipe do GoboLinux são os seguintes:
1- Adicionar partições bootáveis (BSD, QNX, AIX, Darwin, etc) no GRUB durante a instalação da distribuição:
* Descrição: o instalador utiliza scripts Bash e Python para gerar um arquivo de configuração para o GRUB. Este script identifica de forma bastante simples partições FAT e NTFS bootáveis e as adiciona no arquivo menu.lst do GRUB. Outros sistemas operacionais não são considerados pela implementação atual, sendo este o problema inicial proposto.
* Pré-Requisitos: o script não depende de nenhum recurso específico do GoboLinux.
* Download: o script responsável pela geração do menu.lst é o GenGrubMenu, que encontra-se no pacote ConfigTools. A seguinte linha de comando pode ser utilizada para fazer o download da última versão deste pacote:
svn co http://svn.gobolinux.org/tools/trunk/ConfigTools
* Linguagem: Python
* Dificuldade: simples
2- Verificação de variáveis dinâmicas em patches no RecipeLint:
* Descrição: as receitas de compilação de programas no GoboLinux são processadas por um script chamado RecipeLint antes de serem submetidas ao repositório oficial da distribuição. Este script verifica se as declarações nestas receitas estão de acordo com a sintaxe suportada pela ferramenta de compilação de pacotes, e caso não esteja um aviso ou um erro é emitido.
Estas receitas podem incluir patches que serão aplicados ao código fonte antes de sua compilação. Patches que acabam com a extensão ".patch.in" são pré-processados antes de serem aplicados ao código fonte do software, e fazem referência a um pequeno conjunto de variáveis que hoje não são verificadas pelo RecipeLint. São elas:
@%Compile_goboExecutables%@
@%Compile_goboHeaders%@
@%Compile_goboModules%@
@%Compile_goboLibraries%@
@%Compile_goboPrograms%@
@%Compile_goboSettings%@
@%Compile_goboTemp%@
@%Compile_goboVariable%@
@%Compile_target%@
@%Compile_settings_target%@
@%Compile_variable_target%@
@%Compile_foo_path%@
@%Compile_foo_settings_path%@
@%Compile_foo_variable_path%@
As últimas 3 linhas são válidas para quaisquer programas listados no arquivo de dependências que acompanha a receita. Assim, um arquivo Dependencies que contenha as linhas "Glibc >= 2.5" e "KDE-Libs >= 3.5.8" poderia ter referências como "@%Compile_glibc_settings_path%@" ou "%@Compile_kde_libs_path%@", mas não "@%Compile_libusb_path%@", visto que o programa LibUSB não é listado nesse arquivo. Note que o nome dos programas é convertido para lowercase, e que o caracter "-" é convertido para "_".
* Pré-requisitos: o script RecipeLint depende da infra-estrutura de scripts do GoboLinux para ser executado. Os candidatos podem trabalhar em uma distribuição GoboLinux, ou então sobre o Rootless, que permite rodar as ferramentas da distribuição dentro do $HOME. Instruções para download e instalação do Rootless podem ser vistas em http://www.gobolinux.org/?page=rootless.
* Download: O RecipeLint faz parte do pacote Compile, que está disponível em distribuições GoboLinux padrão. No ambiente Rootless é necessário executar o comando "InstallPackage Compile" para instalar a sua última versão estável. Após isso, a instalação da versão de desenvolvimento deste pacote pode ser feita pelo comando "Compile Compile cvs". O código fonte estará disponível em /Programs/Compile/Current/bin/RecipeLint em uma distribuição GoboLinux, ou em $HOME/Programs/Compile/Current/bin/RecipeLint no Rootless.
* Linguagem: Bash script
* Dificuldade: simples
3- Adicionar suporte a recursividade no Listener:
* Descrição: o Listener é uma ferramenta utilizada para monitorar eventos em diretórios e em arquivos. Escrita em C, ela utiliza o Inotify para increver-se em eventos, e caso algum evento ocorra em algum dos arquivos ou diretórios listados no arquivo de configuração, uma ação, também especificada neste arquivo, é tomada. Apesar de ser flexível, o Listener não é capaz de adicionar dinamicamente novos diretórios criados às regras já existentes. Ou seja, caso o diretório "/Users/foo/" esteja sendo monitorado recursivamente e um novo diretório "/Users/foo/docs" for criado, eventos ocorridos dentro deste novo diretório não serão capturados pela aplicação.
Existe um suporte preliminar para recursão no Listener que pode ser utilizado como base inicial para esta tarefa no código fonte atual (arquivo src/rules.c). Ele considera uma entrada extra no arquivo de configuração chamada "RECURSIVE = <yes|no>" para tratar eventos de forma recursiva ou não. O arquivo de configuração padrão do Listener pode ser encontrado dentro do diretório Resources/Defaults/Settings extraído do Subversion (ver instruções de download abaixo).
Um bônus será dado para submissões que converterem a opção "RECURSIVE = <yes|no>" para "RECURSIVE = {n}", onde {n} definiria o número de diretórios a serem monitorados a partir do diretório especificado (n=2 para o diretório "/Users/foo" pegaria eventos ocorridos em "/Users/foo/docs/math", mas não em "/Users/foo/docs/math/Leibniz", por exemplo).
* Pré-requisitos: o Listener não depende de nenhum recurso do GoboLinux.
* Download: svn co http://svn.gobolinux.org/tools/trunk/Listener
Para compilar o pacote em uma distribuição que não o GoboLinux a seguinte linha de comando pode ser utilizada:
$ make SYSCONFDIR=/etc DEVDIR=/dev KERNDIR=/lib/modules/`uname -r`/build
* Linguagem: C
* Dificuldade: média
O GoboLinux mantém duas listas de discussão relevantes para este processo: a lista de desenvolvimento (em inglês) e a lista de usuários (em inglês e em português). Encoraja-se o uso da lista de desenvolvimento para dúvidas quanto à arquitetura das ferramentas.
As submissões deverão ser feitas através do email gobo@gobolinux.org, com o subject "FISL: Arena". Um arquivo com o patch (svn diff) deverá ser anexado como resultado da tarefa. Ao término do prazo as submissões vencedoras serão anunciadas na página do FISL.