Buildroot
Se você estiver disposto a passar por um processo de compilação e reduzir os recursos, tente buildroot . Eu criei uma instalação Linux muito básica (essencialmente apenas o kernel, utilitários Busybox mínimos e um aplicativo extra) que se encaixam em uma imagem ISO de 6MB.
A chave aqui é reduzir a configuração do kernel e do Busybox ("make linux-nconfig" e "make busybox-menuconfig") para o mínimo que você precisa, e então habilitar a compressão XZ no ramdisk inicial do kernel. Reduzir tudo o que eu não precisei me permitiu reduzir a imagem ISO inteira para cerca de 9MB, e depois de ativar a compactação XZ até 6MB.
Para o kernel, eu apenas verifiquei cada opção no menu de configuração e a desativei, a menos que eu especificamente precisasse. Você pode desabilitar todos os drivers de rede para os quais você não possui um adaptador de rede correspondente, desativar outro hardware menos comum que você não prevê usar (cartões seriais multi-porta, joysticks, dispositivos multifuncionais ...) e assim em.
Também é possível deixar muitos subsistemas nas implementações básicas em vez de mais sofisticados (por exemplo, estados ociosos da CPU ACPI básica em vez dos estados ociosos da CPU Intel / AMD), o que pode significar que você trocará eficiência de energia e suporte total a hardware para o tamanho do kernel. Você também pode desativar subsistemas inteiros, como suporte de hibernação / suspensão e sistema de som, se não precisar usá-los.
Você pode economizar muito espaço fazendo isso. Por exemplo, os módulos de suporte KVM (virtualização) e btrfs (que eu decidi colocar fora do kernel como módulos carregáveis no caso de precisar deles no futuro) ocupam 1.1 MB sozinhos.
Excluindo esses arquivos de módulo, você pode chegar a cerca de 4,9MB. Pode ser que eles ocupem menos espaço integrado no binário do kernel, mas depois eu vi que outros módulos menores têm tamanho entre 20 e 100 kilobytes, então sua milhagem pode variar.
Busybox
O Busybox é um único binário que se comporta como binários diferentes, dependendo de como é chamado a partir da linha de comando, o que permite economizar espaço. Está incluído no Buildroot por padrão. Pode se comportar como ls, df, dd, cat, nc, bash e muitos outros.
Parece um bom substituto para quase toda a userland * nix, a menos que você precise de algumas extensões de utilitário específicas que você pode encontrar apenas em versões mais completas / tradicionais (por exemplo, GNU, BSD) desses utilitários.
O Busybox é semelhante ao kernel em termos de desativação de recursos - desative tudo, exceto os binários (applets AKA) que você precisa, e o tamanho será reduzido. Binário Busybox dinamicamente compilado, ele ocupa 512 kilobytes em Buildroot e cerca de 2.1MB em Ubuntu 14.10.
A versão maior do Ubuntu suporta muito mais do que a versão do Buildroot, e ainda é menor que o tamanho padrão - 2.1 MB para o Busybox que inclui todos os utilitários básicos (mais md5, sha256, sha512, telnet, gzip, grep, df, dd e muitos, muitos outros applets) em comparação com o userland tradicional - 2.1MB oferece Bash e apenas alguns desses utilitários.
Métodos extremos de diminuir o tamanho do sistema
Você pode tentar algumas das coisas abaixo para reduzir ainda mais o tamanho, mas fazer backups do diretório de trabalho frequentemente, pois você pode quebrar a instalação do Buildroot em que está trabalhando e pode ter que reconstruir alguns dos binários.
-
Compacte todos os executáveis (incluindo o kernel) com o compressor UPX. Como o UPX é projetado especificamente para executar compactação executável, isso torna os executáveis resultantes muito menores. Mas por favor, certifique-se de testar todos os executáveis depois e que eles funcionem corretamente.
-
Use uma libc diferente. Estou usando o uClibc, mas ouvi dizer que musl e dietlib são muito menores e produzem executáveis menores. Eu tive alguns problemas com o musl desta vez, mas pode funcionar melhor.
-
Substitua alguns ou todos os utilitários do usuário por asmutils . Esses utilitários implementam alguns dos utilitários * nix comuns em Assembly puro (em vez de C ou outras linguagens), o que teoricamente permite um código muito mais compacto. Alguns deles funcionam bem, mas alguns só podem ser usados de maneiras básicas (por exemplo, "montagem" só aceita parâmetros em uma sequência específica e nenhuma opção de montagem específica do FS é implementada). Por outro lado, eles são muito pequenos (a maioria é menos de 1KB compilado, os pequenos são cerca de 139 bytes ou mais). Você pode escolher quais deseja usar, portanto, você pode usar essas substituições somente para os comandos nos quais deseja economizar espaço e manter mais versões ricas em recursos como applets do Busybox.