1 pontos por GN⁺ 2024-07-03 | 1 comentários | Compartilhar no WhatsApp

Inicializando o Linux a partir do Google Drive

Mas como?

  • Queria resolver isso por conta própria, sem dispositivos auxiliares
  • Configurou o sistema para funcionar como um driver de sistema de arquivos em espaço de usuário usando FUSE
  • Foi necessário instalar o programa FUSE no initramfs do kernel Linux e configurar a rede

Processo de inicialização do Linux

  1. O firmware (BIOS/UEFI) inicia e carrega o bootloader
  2. O bootloader carrega o kernel
  3. O kernel descompacta um sistema de arquivos temporário na RAM para fornecer as ferramentas para montar o sistema de arquivos real
  4. O kernel monta o sistema de arquivos real e transfere os processos para o sistema init, que passa a ser executado no novo sistema de arquivos

Prova de conceito

  • Era necessário um initramfs com suporte a rede e os binários FUSE apropriados
  • Foi possível usar o Dracut para construir facilmente um initramfs personalizado
  • Decidiu-se fazer a compilação com base no Arch Linux

O Google entra em cena

  • O projeto google-drive-ocamlfuse foi usado para montar o Google Drive com FUSE
  • Surgiram vários problemas: links simbólicos, hard links, velocidade, permissões etc.
  • Para resolver os problemas, foram criados links simbólicos manualmente e ajustadas outras configurações

Executando em hardware real

  • Uso do driver Ethernet correto e alteração das configurações de rede
  • Foi criado um arquivo EFI unificado em um drive USB para testar em hardware real

Conclusão

  • Este projeto mostra as possibilidades da computação cloud-native
  • Há várias aplicações possíveis, como inicializar o Linux via SSH ou a partir de um repositório Git

Opinião do GN⁺

  • Este projeto é uma tentativa interessante de explorar as possibilidades da computação cloud-native
  • É possível aprender a resolver diversos problemas que surgem ao inicializar o Linux a partir do Google Drive usando FUSE
  • É preciso considerar os problemas de desempenho e confiabilidade de sistemas de arquivos baseados em nuvem
  • Outros projetos com funcionalidade semelhante incluem o gitfs
  • Ao adotar novas tecnologias, é importante considerar cuidadosamente aspectos como desempenho, confiabilidade e segurança

1 comentários

 
GN⁺ 2024-07-03
Comentários no Hacker News
  • Chamar isso de "boot" é forçar a barra, já que o kernel já está carregado

    • vou aceitar quando adicionarem suporte a "montar" google-drive no grub
    • isso é colocar o rootfs em um lugar estranho
    • aliás, meu projeto coloca o rootfs do NixOS no IPFS
  • Antigamente era possível inicializar o Sun Solaris via HTTP

    • isso se chamava wanboot
    • era uma opção de firmware do OpenBoot PROM em máquinas SPARC
    • exemplo de configuração de boot pela rede:
      ok setenv network-boot-arguments dhcp,hostname=myclient,file=https://192.168.1.1/cgi-bin/wanboot-cgi
      ok boot net
      
    • isso carregava o initramfs e o kernel pela (inter)rede
    • links de documentação relacionados:
  • E inicializar o Linux via bittorrent?

    • Exemplo de nbdkit-torrent-plugin
    • o problema é que, ao inicializar o Linux em dispositivos de alta latência, o kernel expira as requisições de I/O rápido demais (cerca de 60 segundos)
    • seria preciso aumentar o tempo de timeout
  • Dá para chamar de boot remoto quando você inicializa alguns megabytes de rootfs a partir de um initramfs local?

  • O que as pessoas realmente querem é boot em segundos, especialmente em sistemas embarcados

    • esse é um problema difícil, mas não parece haver interesse em pesquisa de CS para resolvê-lo
  • Mencionam inicializar a partir do S3

    • trocar para Google Drive adiciona latência
    • mesmo assim, ficou bem feito
  • Quando instalei um modem a cabo em casa pela primeira vez, dava para instalar BSD pela rede usando um disquete de boot

    • na época isso era impressionante
    • não tenho certeza se ainda é possível hoje em dia
    • provavelmente os arquivos ficavam hospedados em FTP ou TFTP
    • hoje em dia, quase tudo é arquivo ISO
  • Já fiz algo parecido: inicializar a partir do repositório RPM do DVD de instalação do Tumbleweed

    • o objetivo inicial era escrever um sistema de arquivos fuse que montasse pacotes RPM
    • eu queria ver até onde dava para chegar
    • no fim, deu para ir bem longe:
    • o sistema inicializa em um desktop funcional, e todos os pacotes no DVD parecem estar instalados
  • No Windows, isso é feito com frequência usando Citrix

    • chamam isso de pvs
    • você faz um pequeno boot por pxe e transmite uma imagem de servidor Windows
  • "Minha mente se desfaz, e encontro minha obra-prima entre milhares de anos de tempo de programadores e gritos de insanidade"

    • digno de indicação ao Pulitzer