Desenvolvimento de um Sistema Operacional Linux para fins Acadêmicos e Científicos Ramon da Silva Pereira Wercely Duarte de Sousa Carlos Henrique Feichas Instituto Nacional de Telecomunicações – Inatel [email protected] Instituto Nacional de Telecomunicações – Inatel [email protected] Instituto Nacional de Telecomunicações – Inatel [email protected] Resumo — Este artigo apresenta os desafios na construção de um sistema operacional livre utilizando o LFS. Abstract — This paper presents the challenges in building a free operating system using the LFS. Palavras chave — Linux, LFS, Pacotes Linux, Software Livre, Sistema Operacional, Desenvolvimento em Linux. I. INTRODUÇÃO O presente documento é uma síntese dos conhecimentos adquiridos durante o processo de Iniciação Científica onde foi desenvolvido um SO (Sistema Operacional) Linux para fins acadêmicos e científicos seguindo a referência LFS (Linux From Scratch), bem como os resultados obtidos ao longo do processo. II. OBJETIVO O Linux é um sistema operacional de código aberto distribuído gratuitamente pela internet, o que permite a qualquer pessoa visualizar como o sistema funciona, corrigir algum problema, e até fazer alguma sugestão de melhoria. Tais características motivam o seu rápido crescimento, aumento da compatibilidade de periféricos e sua estabilidade [1]. Este software básico, por ser de código aberto, permite aos programadores adaptá-los a suas necessidades, não ficando assim, restritos apenas aos desenvolvidos por grandes empresas ou comunidades. A idéia do trabalho é desenvolver uma distribuição Linux para fins acadêmico-científicos. Tal sistema dispõe de aplicativos, API’s (Application Programming Interface), e outras ferramentas utilizadas para este fim. III. DESENVOLVIMENTO DO SISTEMA O processo de desenvolvimento foi dividido em etapas cujas atividades e resultados estão descritos a seguir: A. Planejamento Nesta etapa os integrantes realizaram um profundo estudo sobre o SO Linux, arquitetura, sistemas de arquivo, pacotes importantes, comandos e scripts, diferença entre suas distribuições (Gnome, KDE, Mandriva) e outros sistemas distintos (Windows, Machintoch). B. Preparação do Ambiente Anfitrião No processo de criação de um SO Linux seguindo a referência LFS, é necessário possuir uma de suas distribuições instalada para servir de sistema anfitrião, além de um espaço em disco para alocação do novo sistema. Neste projeto foi escolhido o Ubuntu como sistema base (anfitrião). Os integrantes optaram por utilizar uma máquina virtual devido a sua portabilidade, além de evitar danos aos dados já existentes no computador utilizado. A máquina virtual escolhida foi Virtual Box por ser um aplicativo grátis, de interface simples, intuitiva, possuir vários recursos, além de muitos usuários que escrevem em fóruns suas experiências. Na preparação do ambiente, foi criada uma partição de 20 GB de espaço na máquina virtual (espaço considerado suficiente, já que existem distribuições que ocupam espaço muito menor), onde metade foi utilizada para instalação do sistema base e a outra parte para o sistema hospedeiro. Também foi destinada a máquina virtual metade do processamento e memória RAM do computador. Isso é necessário para reduzir o tempo de compilação dos pacotes úteis na construção do novo sistema. C. Instalação de arquivos O Sistema Operacional é o conjunto de programas que fazem a interface do usuário e seus programas com o computador. Ele é responsável pelo gerenciamento de recursos e periféricos (como memória, discos, arquivos, impressoras, CD-ROM's, etc.), interpretação de mensagens e a execução de programas [1]. Estes programas estão contidos em pacotes. Para a construção do Linux (seguindo LFS) são necessários aproximadamente 80 pacotes, que ocupam 148MB de disco. A tabela 1 possui alguns dos pacotes utilizados: TABELA I PRINCIPAIS PACOTES UTILIZADOS. NOME DO PACOTE Binutils VERSÃO 2.22 Glibc 2.22 Flex 2.5.35 Gcc 4.6.2 Make 3.82 Linux 3.2.5 Vim Ncours 7.3 5.9 Tar 1.26 Bash 4.2 Coreuti 8.15 Sed 4.2.1 Grub 1.99 es ls CONTEÚDO Contém um vinculador, um assembler e outras ferramentas que trabalham com arquivos objetos. Contém a biblioteca C principal. Utilizado para gerar programas que reconhecem padrões em textos. Contém os compiladores C/C++. Possui programas para compilar pacotes. Contém o kernel ("núcleo") do Linux. Editor de texto. Contém bibliotecas para manipulação de caracteres no terminal. Programa que armazena e extrai arquivos de um pacote. Interpretador de comandos. Contém programas para ajuste de características básicas do sistema. Contém um editor de Stream (fluxo de dados). Programa multicarregador de SO. O processo de instalação de pacotes é dividido em três etapas: descompactação, compilação e instalação. A primeira etapa é realizada no sistema anfitrião, deve-se mover os arquivos descompactados para o sistema hospedeiro via terminal e em seguida, realizar as duas etapas seguintes. É um processo cuidadoso, pois a maioria dos pacotes possui dependências com outros. Uma vez errado o processo de compilação, todo o processo deve ser refeito. Seguindo a referência LFS o primeiro pacote a ser instalado é Binutils, este possui o assembler e o vinculador dinâmico que é utilizado pelo GCC e Glibc, o segundo é o GCC que contém os compiladores C/C++ e o último pacote é o Vim (editor de texto). D.Tornando o Sistema Inicializável Após realizar a instalação dos pacotes, o sistema em criação deve ser configurado para ser inicializável. Isto é feito criando o arquivo FSTAB, configurando um novo KERNEL e instalando o GRUB. O arquivo FSTAB determina onde os sistemas de arquivos devem ser montados. A figura 1 mostra este arquivo no sistema criado neste projeto. Fig. 1. Arquivo FSTAB. A configuração do Kernel possibilita adaptá-lo ao hardware de cada usuário (por exemplo: caso o fabricante seja HP, há módulos para HP, caso DELL, também há módulos). É necessário realizar a configuração para que o novo SO seja adaptado conforme a necessidade. Como o sistema proposto é de uso geral (independente do fabricante do hardware) , não houve modificação. A figura 2 mostra a tela de configuração do kernel. Fig. 2. Tela de configuração do KERNEL. O GRUB (Grand Unified Bootloader) é um programa que permite ao usuário escolher através de um menu qual SO será carregado. Uma vez instalado, deve-se criar um arquivo chamado menu.lst no diretório que é responsável pela lista de exibição de sistemas operacionais instalados. A figura 3 mostra o código do "menu.lst" e a figura 4 mostra a tela de exibição do mesmo. Fig. 3. Exemplo de arquivo menu.lst. Fig. 6. Diretório raiz (/) do novo SO.. E. Instalando Pacotes de Rede e Segurança Fig. 4. Menu de escolha do sistema a ser carregado. Com todos os pacotes instalados e configurados o novo sistema está pronto para ser carregado. As figura 5 e 6 mostra a primeira tela do sistema criado e uma listagem do diretório raiz deste sistema. A referência LFS possui uma continuação, o BLFS (Beyond Linux From Scratch), cujo o foco é instalar pacotes de segurança, configurar funções de hardware, funções de usuários, instalar interface gráfica e outros aplicativos. O primeiro conjunto de pacotes indicado pelo BLFS é utilizado para instalação e configuração dos dispositivos removíveis de mídia como pen-drives, CDs, disquetes e USB. Nesta fase ocorreram os piores problemas encontrados ao longo do projeto. O primeiro deles aconteceu devido a uma incompatibilidade entre a máquina virtual e o sistema construído, o que ocasionou no não funcionamento dos dispositivos de mídia. Isto causou um atraso no projeto, pois não era possível instalar novos pacotes por não conseguir conectar a internet e nem através de periféricos. A solução encontrada para o problema foi realizada em duas etapas: A primeira foi criar um de arquivo de configuração de rede ETHERNET. O que não era a solução completa, já que o sistema não possuía o apt-get, wget e o kpkg (programas essenciais para o download de pacotes). A segunda etapa foi criar um servidor FTP (File Transfer Protocol), onde foram colocados os pacotes a serem baixados, e em seguida transferidos ao Linux via rede "cabeada". Os primeiros pacotes instalados foram os pacotes de controle de usuário e segurança (pacote de criptografia de senhas, listas de controle de acesso, entre outros). Seguindo de arquivos com scripts para compressão de manuais de informações do sistema. TABELA II PRINCIPAIS PACOTES INSTALADOS DO BLFS. PACOTE Wget Fig. 5. Tela de Login do novo SO (tela inicial). VERSÃO 1.14 ConsoleKit 0.4.6 Iptables 1.4.17 CONTEÚDO Programa para instalação de pacotes não interativo. Possui configurações de usuários Principal ferramenta de Firewall do Linux. Nss 3.14.1 Stunnel 4.54 Sudo 1.8.6p3 Apr 1.4.6 Glib 2.34.3 Links 2.7 Programa para serviço de segurança em aplicações cliente-servidor. Permite realização de tunelamento sobre a rede PPP. Permite a alguns usuários executar alguns ou todos os comandos como super usuário. Suporte para Apache WEB Service. Prove a utilização algumas funcionalidades do sistema como thread, carregamento dinâmico e sistema objeto. Navegador de internet em modo texto XPROTO. Porém, este pacote é instalado ao atribuir o Xcbproto, que já havia sido atribuído ao sistema antes. Após muitas tentativas para encontrar a solução e o prazo de finalização do projeto se esgotando, o integrantes decidiram utilizar um sistema de customização para completar o trabalho já que não havia mais tempo suficiente para mais tentativas de solução, utilizou-se uma versão do Ubuntu e um software de customização de SO, para desta forma, a idéia final do projeto pudesse ser apresentada. Para diferenciar o sistema criado dos demais já existentes, os integrantes modificaram, também, a tela de carregamento do sistema além do layout do GRUB. A figura 8 é uma demonstração de uma das alterações que podem ser feitos na tela de GRUB. Ao concluir estas instalações, o sistema passou a ter um novo layout, com textos coloridos, separando diretórios, de arquivos e link's. A interface passou a ser relativamente mais intuitiva (para usuários familiarizados com sistemas modo texto), já que possuía uma gama maior de comandos e inclusive um navegador web em modo texto, o "Links". A figura 7 exibe o sistema após a instalação destes pacotes. Fig. 8. Adicionado a tela de GRUB uma imagem diferente da padrão. G.Instalação dos Softwares de Desenvolvimento Os programas julgados pelos integrantes e por alguns professores da instituição de ensino como os mais úteis para fins acadêmicos e científicos, compõe o sistema criado. A obtenção e instalação destes programas se deram através do pacote APT. O APT (chamado por alguns de apt-get) é uma avançada ferramenta de download e instalação de programas. A tabela 3 é composta por uma lista de programas para estes fins, instalados no sistema. Fig. 7. Sistema com o novo layout. F. Instalando a Interface Gráfica A Interface Gráfica é considerada um dos principais requisitos de um sistema operacional. A interface GNOME, utilizada no Ubuntu, é a mais utilizada entre os usuários de sistemas livres [2]. Por este motivo, neste projetos foi a interface escolhida. Para instalação da interface gráfica é necessário atribuir ao sistema uma série de pacotes como XOrg, XOrg Libraries, UtilMacros e Xcb-proto. Nesta fase ocorreu o segundo e o maior problema encontrado ao longo do projeto. Durante a instalação do pacote MakeDepend ocorria um erro que informava a não instalação de um pacote necessário, o TABELA III PRINCIPAIS SOFTWARES DE FINS ACADÊMICOS/CIENTÍFICOS INSTALADOS PACOTE Eclipse Sci-Lab CONTEÚDO Ambiente de desenvolvimento de aplicativos em diversas linguagens. Software científico para computação numérica, baseado no Matlab Filezilla Cliente FTP, SFTP e FTPS muito utilizado por desenvolvedores WEB no processo de deploy de aplicativos. Qt Creator Ambiente de desenvolvimento multiplataforma. Selenium Plugin para automatização de teste testes. IDE VirtualBox Maquina Virtual. Dia Editor de diagramas, utilizado na criação de desenhos técnicos DDD Programa de depuração de arquivos em C/C++. MySql Sistema de gerenciamento de WokBench banco de dados (SGBD). Tomcat Servidor WEB Java, container de servlets. Eagle Programa de montagem de esquema elétrico. GCC/G++ Conjunto de compiladores de Linguagens de programação. WireShark Analisador de tráfico de rede. Bison e Flex Utilizado na construção de linguagens de programação e compiladores. III. CONCLUSÃO Construir um sistema operacional não é uma tarefa simples, pois o mesmo utiliza uma grande quantidade de arquivos e necessita de muito cuidado na instalação deles, além de necessitar de muito tempo de construção. Porém é um processo de muito aprendizado. É interessante poder olhar para um sistema e poder entender o que ocorre nas camadas mais internas, além da que o usuário comum pode ver, em outras palavras enxergar o que ocorre "por baixo dos panos", quais arquivos são responsáveis por determinados eventos no sistema. Este processo foi tão motivador que inspirou os integrantes a continuá-lo no Trabalho de Conclusão de Curso (TCC). IV. REFERÊNCIA [1] - M. S. Gleydson, 05/12/2010. Guia Foca GNU/Linux, versão 4.22, 2010. Disponível: http://www.guiafoca.org/?page_id=238. [2] Beekmans. Gerard. 2012. Linux From Scratch, versão 7.1. 2012. Disponível: http://www.vivaolinux.com.br/linux/ [*] Bernardes, Luan. Oliveira, Janiel. Etapas de Desenvolvimento de Sistemas. 2011. Disponível: http:// http://portalsis.wordpress.com/category/artigos-cientifico/