Peço desculpas pelo bloco de texto recebido, mas espero encontrar uma solução para um problema estranho que "pode" ser um bug. Estou no processo de criar uma instalação automatizada offline ( air-gapped ) do Ubuntu 24.04.1 LTS usando uma combinação de inicialização PXE do ISO e apontando-o para um arquivo de dados do usuário que contém minha instalação automática e configuração de dados do usuário para uma instalação bare-metal totalmente automatizada.
Qualquer pessoa familiarizada com esse processo sabe que é um processo de instalação multifásico, com a fase 1 sendo a instalação base processando qualquer coisa no "autoinstall:" , formatando discos e copiando arquivos do ISO para o disco, etc... e a fase 2 basicamente processando qualquer coisa definida na seção "user-data:" do seu arquivo user-data. Além disso, é possível configurar pacotes para serem instalados durante a fase 1 de instalação (por exemplo, openssh-server). Dito isso, conforme observado na página de referência do AutoInstall ( https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html#ssh ):
Observe que as ISOs de instalação do Desktop não incluem o openssh-server, portanto, as instalações do Desktop exigem acesso ao arquivo do Ubuntu para que o install-server seja bem-sucedido.
Então, se entendi corretamente, tudo isso significa que para instalar o openssh-server, ou qualquer pacote não contido no ISO, o instalador precisa conseguir acessar um arquivo Noble do Ubuntu para poder baixar e instalar o pacote.
Agora, como mencionado, estou tentando executar a instalação automatizada em uma rede air-gapped. Eu espelhei os repositórios nobres do Ubuntu da internet e os disponibilizei na rede air-gapped. Eu também validei que funciona executando uma instalação manual do Ubuntu 24.04.1 LTS e atualizando o arquivo /etc/apt/sources.list.d/ubuntu.sources para apontar para o espelho air-gapped e executando com sucesso um apt update/upgrade e instalando o openssh-server (e o ansible).
Então, o problema que preciso superar é configurar de alguma forma a parte da Fase 1 (instalação automática:) para usar meu espelho local como uma fonte para instalação de pacotes.
Este processo sobre como fazer isso está documentado aqui:
https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html#apt https://curtin.readthedocs.io/en/latest/topics/apt_source.html
No entanto, após várias horas tentando várias combinações de tentativas de configurar a seção "apt:" no meu arquivo de dados do usuário, o que estou observando é que qualquer coisa colocada na seção "apt:" parece ser aplicada apenas às configurações /target/etc/apt/, não à sessão ativa. O cache do apt parece conter apenas os pacotes que estão disponíveis no ISO. Por causa disso, especificar "pacotes:" adicionais para serem instalados faz com que a instalação automática falhe.
Aqui estão as várias configurações que tentei:
Usando o formato deb:
#cloud-config
autoinstall:
apt:
preserve_sources_list: false
mirror-selection:
primary:
- uri: "http://mirror.local.net/ubuntu"
arches: [default]
fallback: offline-install
geoip: false
Usando o formato deb822:
#cloud-config
autoinstall:
apt:
sources:
local.sources:
source: |
Types: deb
URIs: http://mirror.local.net/ubuntu
Suites: $RELEASE $RELEASE-updates $RELEASE-backports $RELEASE-security $RELEASE-proposed
Components: main restricted universe multiverse
Signed-by: /usr/share/keyrings/ubuntu-archive-keyring.gpg
preserve_sources_list: false
fallback: offline-install
geoip: false
Em meus testes, "parece" que quando eu especifico o deb formatado "apt:", não há nenhuma indicação no console do instalador de que ele sequer tenta contatar o espelho em algum ponto para atualizar o cache (apt update) ou para instalar o pacote. Quando eu especifico o deb822 formatado "apt:", uma das primeiras coisas que o instalador parece fazer é validar que ele pode contatar mirror.local.net, assim como archive.ubuntu.com e security.ubuntu.com.
Então pensei que usar o "apt:" formatado em deb822 pareceria ser a coisa certa a fazer, porém, mais tarde na instalação, quando ele vai instalar quaisquer pacotes definidos, posso ver claramente nos logs:
Sep 05 10:30:00 ubuntu subiquity_log.4233[15323]: Get1 file:/cdrom nobel InRelease
Sep 05 10:30:00 ubuntu subiquity_log.4233[15323]: Ign1 file:/cdrom nobel InRelease
Sep 05 10:30:00 ubuntu subiquity_log.4233[15323]: Get2 file:/cdrom nobel Release [1072 B]
Sep 05 10:30:00 ubuntu subiquity_log.4233[15323]: Get2 file:/cdrom nobel Release [1072 B]
Sep 05 10:30:00 ubuntu subiquity_log.4233[15323]: Reading package lists...
...
Sep 05 10:30:00 ubuntu subiquity_log.4233[15312]: Running command ['unshare', '--fork', '--pid', '--mount-proc=/target/proc', '--', 'chroot', '/target', 'apt-get', '--quiet', '--assume-yes', '--option=Dpkg::options::=--force-unsafe-io', '--option=Dpkg::Options::=-force-confold', 'install', '--download-only', 'openssh-server'] with allowed return codes [0] (capture=False)
Sep 05 10:30:00 ubuntu subiquity_log.4233[15432]: Reading package lists...
Sep 05 10:30:00 ubuntu subiquity_log.4233[15432]: Building dependency tree...
Sep 05 10:30:00 ubuntu subiquity_log.4233[15432]: Reading state information...
Sep 05 10:30:00 ubuntu subiquity_log.4233[15432]: E: Unable to locate package openssh-server
Quando o instalador trava enquanto ainda está na sessão Live, se eu entro no terminal e verifico o seguinte, não há referências a "mirror.local.net" em nenhum dos seguintes arquivos:
/etc/apt/sources.list
/etc/apt/sources.list.d/ubuntu.sources
/target/etc/apt/sources.list
/target/etc/apt/sources.list~
/target/etc/apt/sources.list.d/ubuntu.sources.curtin.orig
A única referência que consigo encontrar ao que especifiquei na seção "apt:" só pode ser encontrada no arquivo /etc/cloud/cloud.cfg.d/91_kernel_cmdline_url.cfg, que parece ser uma cópia do arquivo de dados do usuário.
A outra observação que fiz é que se eu mover toda a instalação de software extra para a Fase 2 da instalação (1ª inicialização após a instalação base), onde a seção de dados do usuário "coisas" é processada, o arquivo local.sources existe no diretório /etc/apt/sources.list.d e se eu executar um, runcmd: apt install openssh-server -y
os pacotes serão instalados corretamente.
Minha pergunta é: alguém mais observou esse problema ou alguém mais tem uma instalação funcional do Ubuntu 24.04.1 LTS com airgapp/offline e pode verificar se consegue instalar o openssh-server a partir de um espelho de repositório interno do Ubuntu?
Admito plenamente que posso estar encontrando um bug com o novo instalador, mas queria descartar a possibilidade de ser um idiota primeiro. Se alguém tiver um exemplo de uma seção "apt:" funcional para especificar um espelho local, eu realmente apreciaria alguma orientação.
Obrigado pela leitura e pelo feedback!
TLDR; as configurações "apt:" na instalação automática do Ubuntu 24.04.1 LTS parecem ser ignoradas durante a fase de instalação inicial.