"Se você deseja fazer uma torta de maçã do zero, primeiro invente o universo." -- Carl Sagan
Layout do disco
A imagem utiliza uma tabela de partições GPT:
| Partição | Tamanho | Sistema de arquivos | Rótulo |
|---|---|---|---|
| p1 | 10G | F2FS | Fleur_de_Lys_Root |
| p2 | 20G | bcachefs | Fleur_de_Lys_Sources |
| p3 | 10G | bcachefs | Fleur_de_Lys_Home |
Pré-requisitos
Um host Linux com o seguinte disponível:
losetup,mount,chroot(util-linux)- Suporte aos sistemas de arquivos F2FS e bcachefs (
f2fs-tools,bcachefs-tools) - Conjunto de ferramentas de desenvolvimento padrão (gcc, g++, make, binutils, etc.)
Execute bash tests/version-check.sh para verificar se o seu host possui as ferramentas necessárias.
Utilização
Todos os comandos requerem privilégios de root.
sudo make mount # Anexar a imagem e montar partições em mnt_image/
sudo make run # Montar + vincular sistemas de arquivos virtuais + entrar no shell chroot
sudo make umount # Desmontar tudo e desanexar o dispositivo loop
Construindo a imagem do zero
Para criar uma nova imagem de disco em branco (20 GB) com a tabela de partições e sistemas de arquivos formatados:
sudo bash scripts/build_os.sh
Estrutura do projeto
Fleur_de_Lys.img # A imagem de disco
mnt_image/ # Ponto de montagem (criado por make mount)
Makefile # Alvos de montagem, execução e desmontagem
docker/ # Ambiente de compilação Docker em múltiplas etapas
Dockerfile # Camadas de compilação das etapas 1 e 2
engine/ # Scripts de compilação (fleur-build.sh, etc.)
recipes/ # Instruções de compilação de software por estágio
etc/
os-release # Identidade da distribuição
scripts/
build_os.sh # Cria e particiona uma nova imagem de disco
build_img.sh # Auxiliar de criação de imagem
mount.sh # Script de montagem legado
tests/
version-check.sh # Verifica os requisitos da cadeia de ferramentas do host
Ambiente da cadeia de ferramentas do Docker
A cadeia de ferramentas e as ferramentas do sistema intermediário são construídas usando uma compilação Docker em múltiplas etapas:
- Etapa 1 (toolchain-builder): Inicializa o compilador (gcc/clang), o binutils e a glibc.
- Etapa 2 (temp-tools-builder): Compila todos os utilitários compilados de forma cruzada (bash, coreutils, python, meson, ninja, etc.) em
/tools.
Para construir o ambiente da cadeia de ferramentas:
cd docker
make build
