Você vai precisar de um computador com um sistema
Linux
qualquer, qualquer distro atual serve, e nele você vai precisar
de um compilador GCC, make, glibc-devel, binutils etc. Você vai
precisar de 2.5GB de espaço em disco, bastante memória RAM e
processador rápido também ajuda.
Preparando o sistema
Crie um diretório chamado "ROOT_KMI", nele vamos armazenar
nosso monstrinho, exemplo:
# mkdir ROOT_KMI
No meu sistema, o "ROOT_KMI" está hospedado na partição /source,
vamos simplificar isso definindo uma variável de ambiente
chamada "ROOT_KMI" que vai conter o caminho completo do "/" da
nossa distro, exemplo:
# export ROOT_KMI=/source/ROOT_KMI
Assim usaremos a variável $ROOT_KMI sempre que quisermos nos
referir ao "/" da distro.
Você pode criar uma partição dedicada para a distro usando o
fdisk, formatando com o
mkfs.ext2, depois basta
montar a partição em $ROOT_KMI.
Vamos precisar também um diretório temporário onde vão "morar"
todos os programas temporários que vamos precisar gerar e que não
vão fazer parte da distro final:
# mkdir $ROOT_KMI/temp
E vamos criar outro para hospedar os códigos fonte:
# mkdir $ROOT_KMI/fontes
Seres humanos tem o péssimo hábito de errar, então para evitar
acidentes, recomendo que seja criado um usuário ordinário para que
as compilações e instalações não interfiram na sua distro principal:
# useradd -s /bin/bash -m -k /dev/null komain
Assim será criado um usuário chamado "komain", os parâmetros usados
significam:
- -s : o tipo de shell, no caso o /bin/bash
- -m : cria um home para o usuário komain, /home/komain
- -k : /dev/null" evita que os arquivos do /etc/skel sejam copiados para a nova conta.
Se você não definir uma senha para o usuário komain, você não poderá logar, certo? Errado! Dá pra acessar o usuário sem senha, mas defina uma assim mesmo:
# passwd komain
Agora conceda ao usuário komain acesso total ao $ROOT_KMI/temp e $ROOT_KMI/fontes:
# chown komain $ROOT_KMI/temp $ROOT_KMI/fontes
Vamos definir um ambiente mais amigável para nosso usuário ordinário?
Claro que vamos, digite isso aqui:
# cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='[\u->\h] \W $ ' /bin/bash
EOF
Quando você se loga em um console, um shell do tipo login lê as
variáveis do seu sistema no
/etc/profile, no comando
"exec env -i" dizemos ao shell ignorar TODAS as variáveis que não
sejam $HOME, $TERM e $PS1.
Novas instâncias shell que não sejam do tipo login (acessadas por
"su - komain", ou direto no console) não lêem o /etc/profile ou o
/.bash_profile, mas apenas o /.bashrc. Para evitar problemas com
variáveis, crie agora:
# cat > ~/.bashrc << "EOF"
set +h
umask 022
ROOT_KMI=/source/ROOT_KMI
LC_ALL=POSIX
PATH=/temp/bin:/bin:/usr/bin
export ROOT_KMI LC_ALL PATH
EOF
Onde o "set +h" desliga a função hash do bash, o bash armazena na
memória o caminho completo dos executáveis ao invés de procurar
pelo pelo executável a cada requisição. Devido a natureza do nosso
trabalho, vamos usar sempre as ferramentas novas que vamos construir,
tornando o processo de compilação mais dinâmico.
"umask 022", garante que os novos arquivos criados tenham sempre
as permissões corretas, só o dono escreve mas todo o resto lê e executa.
"ROOT_KMI=/source/ROOT_KMI", caminho para o root da distro.
"LC_ALL=POSIX" define as variáveis de localização, língua, moeda, fuso horário... isso pode nos causar problemas nesse momento, deixemos no padrão.
"PATH=/temp/bin:/bin:/usr/bin", define o caminho dos diretórios onde o bash deve procurar por binários.