segunda-feira, 15 de novembro de 2010

KoshLinux$ ./project start --faster

No dia 27/10 iniciei o empolgante projeto de criar uma distribuição Linux a partir do código fonte, mas sem, para isto, utilizar qualquer framework existente, criando todas as ferramentas necessárias em Ruby.

Analisei algumas alternativas, fiz minhas considerações e escolhi seguir a linha do Linux From Scratch. Numa ideia anterior, pensava em toma como base o caminho do GoboLinux, mas uma mudança completa na estrutura do sistema de arquivos não pode vir agora.

Trabalhei na criação do Toolchain, que irá criar o ambiente inicial, onde poderei depois, criar a distribuição em si e, fiz as classes e implementei o sistema de Profiles, seguido do sistema de Recipes. Percebi que havia conseguido um bom avanço quando vi o Recipe binutils-build compilado e instalando.



No sábado, dia 02/11 o Shingonoide se uniu ao projeto, o que deu velocidade. Conseguimos concluir todos os Recipes do Build, o Stage1 e chegamos a entrar no Base, o Stage2, mas tivemos que recuar e refatorar o que tínhamos feito até ali.

Ai implementamos parâmetros no scripts build e melhoramos o sistema de hooks do Recipe, que fiz em YML, mas neste ponto, vi que poderia ter feito diretamente em Ruby, o que teria facilitado um pouco e me dado maior poder, além de tornar tudo mais simples.

Claramente vejo que eu pensava em arquivo de configuração quando poderia pensar no objeto em si. Só isto já conta como ponto positivo, porque um dos motivos de fazer o KoshLinux em Ruby é aprender a implementar o Ruby em todos os lugares possíveis em uma distribuição Linux. Então, mais para frente, vou ter um ambiente gráfico todo em Ruby, com desktop em Ruby, com aplicações Ruby e tudo mais. Só que tem uma surpresa aqui, o nome dela é RubyDesktop e é só o que se sabe agora. =D

De volta ao KoshLinux, hoje estamos com o gerador mais estável, temos o Stage1 compilando e no Stage2 chegamos até o Expect, nem tão devagar assim estamos progredindo. Prepararemos um release no Master já já.



Enquanto isso, criamos o site temporário e o Twitter, seguem os links:

KoshLinux Official Web Site: http://koshlinux.com/
Twitter: @KoshLinux

O script build já faz:

  • Script para testar as dependências
  • Recebe parâmetros da linha de comando
  • Configura o ambiente com base em perfil
  • Recipe em YML com tipo de operação e dependência
  • Cria/limpa pasta de trabalho
  • Gera logs por estágio do processo
  • Download de arquivo
  • Descompactação de tar.gz e tar.bz
  • Cria pastas necessárias
  • Faz download de patches e os aplica
  • Executa tarefas pré e pós fetch, unpack, configure, make e make install
  • Configura o pacote source
  • Executa o make
  • Executa o make install
Com isto e a lista de pacotes definida no profile, temos o básico necessário para chegar ao fim do Stage2 com sucesso, mas temos muita coisa pela frente.


Dependencias


Até o momento o Toolchain depende dos seguintes pacotes:

bash
binutils
bison
yacc
readlink
bzip2
coreutils
diff
find
gawk
gcc
libc6
grep
gzip
cat
m4
make
patch
perl
sed
tar
texinfo
git
ruby


Uso


Como o Toolchain ainda não está completo, você ainda não vai ter o KoshLinux dando boot em sua máquina, mas vamos lá:

O primeiro passo, é fazer o clone do repositório. Estando em uma pasta préviamente preparada, execute:

git clone git@github.com:KoshTech/Kosh-Linux.git
git checkout devel
cd Kosh-Linux/DevelSystem/Build

No Linux From Scratch, pegamos um script para checar as dependencias. Vamos executá-lo:

./check_requirements.sh

É crucial ter todas as dependencias instaladas antes de prosseguir. Se teve OK para tudo, agora apenas rode o script Build:

./build_system.rb

Com isto, o processo de build vai iniciar pelo Stage1 e irá compilar os Recipes:

build-binutils
build-gmp - source_only
build-mpc - source_only
build-mpfr - source_only
build-gcc
build-linux
build-glibc

E depois irá iniciar o Stage2, compilando:

binutils
gcc
ctl
expect

E é isto que existe do KoshLinux até agora.

Mas isto vai mudar, já já.




KoshLinux$ ./project start --daemon --with-help-is-more-easy=CAN_YOU_HELP_US?

Nenhum comentário:

Postar um comentário