Atualmente, sou capaz de construir um chroot Ubuntu 18.04 de 32 bits na minha máquina de desenvolvedor e queria saber se posso fazer o processo acontecer dentro de um contêiner docker.
O processo que utilizo:
- Descompacte uma imagem base do Ubuntu (
ubuntu-base-18.04.3-base-i386.tar.gz
) - Copie o
resolve.conf
do host para o sistema de arquivos sem tar - Monte
/sys
,/proc
e/dev
- Execute
chroot /location/of/filesystem /bin/bash
para entrar no chroot e execute a configuração adicional - Quando terminar, desmonto tudo e tar o arquivo
/location/of/filesystem
.
É possível fazer esse mesmo método dentro de um contêiner docker?
Não vejo nada sobre poder montar/desmontar arquivos de dentro de um contêiner docker.
O problema que pensei ter inicialmente foi por causa de como programei o script executado pelo contêiner docker para criar o chroot.
É possível criar um chroot de 32 bits em um contêiner docker. Eu tive que rodar um container privilegiado , caso contrário eu não poderia montar diretórios/sistemas de arquivos necessários (Ex:
/proc
) para o chroot (E eu receberia erros).Eu tive que modificar as etapas que usei um pouco:
docker run -t --rm --name "chrootTest" -v $(pwd):/root/<CHROOT_SCRIPT_DIR> --privileged --workdir /root/<CHROOT_SCRIPT_DIR> <IMAGE>:<TAG> ./build-chroot.sh <CHROOT_DIR_LOCATION>
/dev
nem/sys
para as modificações do chroot que estou fazendo. ( As modificações consistem em remover diretórios/arquivos/links simbólicos eapt-get install
-ing algumas dependências. Eu só precisei montar/proc
para essas ações, mas se você estiver fazendo algo diferente, talvez seja necessário montar os outros diretórios. )<CHROOT_DIR_LOCATION>
e copiaresolve.conf
do host para o sistema de arquivos descompactado, ao mesmo tempo em que cria todos os diretórios necessários para montagem.chroot "$CHROOT_DIR_LOCATION" /bin/bash <<'EOF' ... EOF
tar
instalo o sistema de arquivos chroot e removo o workdir<CHROOT_DIR_LOCATION>
e o script termina e o contêiner docker é removido.Devido à montagem do volume, o arquivo tar com o chroot recém-criado ainda existe no host que executa o comando docker.
Eu uso o docker para fazer alterações no CD ao vivo do instalador do Ubuntu. Ele contém um
casper/filesystem.squashfs
que é semelhante a umchroot
ambiente; ou seja, é um sistema de arquivos raiz completo que é gravado no sistema de arquivos de destino durante a instalação. Eu faço alteraçõesfilesystem.squashfs
assim:Neste ponto, o contêiner agora parado
squashfs-mine
contém o sistema de arquivos original, juntamente com quaisquer modificações realizadas durante seurun
. Agora você podeexport
usar o sistema de arquivos do contêiner como um arquivo tar:No meu caso, eu gostaria de gerar um novo
filesystem.squashfs
no*.iso
conteúdo original e re-empacotar o*.iso
:...mas suas necessidades são provavelmente diferentes.