Instalando o CoreOS diretamente no hardware

Este guia fornece instruções para instalar o Fedora CoreOS diretamente no hardware. Estão disponíveis três opções:

  • Instalando da ISO live

  • Instalando do PXE

  • Instalando do contêiner

Pré-requisito

Antes de instalar o FCOS, você deve ter um arquivo de configuração do Ignition e hospedá-lo em algum lugar (por exemplo, usando python3 -m http.server). Se você não tiver um, consulte Produzindo um arquivo de Ignition.

Se você tiver servidores com diferentes tipos e/ou número de discos rígidos, deve criar uma configuração de Ignition personalizada separada para cada máquina (ou classe de máquina). Um bom modelo é ter as partes comuns da configuração fatoradas em uma configuração separada do Ignition que pode ser mesclada (via HTTP ou em linha) na configuração personalizada por máquina.

Instalando da ISO live

To install FCOS onto bare metal using the live ISO interactively, follow these steps:

podman run --privileged --pull=always --rm -v .:/data -w /data \
    quay.io/coreos/coreos-installer:release download -s stable -p metal -f iso

Note this is just using coreos-installer as a tool to download the ISO.

Você pode iniciar o ambiente live em legacy (BIOS) ou no modo UEFI, independentemente do modo que o sistema operacional usará depois de instalado.
  • Grave a ISO em um disco. No Linux e macOS, você pode usar dd. No Windows, você pode usar Rufus no modo "Imagem DD".

  • Inicialize-a no sistema de destino. A ISO é capaz de trazer um sistema FCOS totalmente funcional puramente da memória (ou seja, sem usar qualquer armazenamento em disco). Uma vez inicializado, você terá acesso a um prompt de comando bash.

  • Agora você pode executar coreos-installer:

sudo coreos-installer install /dev/sda \
    --ignition-url https://example.com/example.ign

Uma vez que a instalação esteja completa, você pode simplesmente executar`sudo reboot`. Após a reinicialização, o primeiro processo de inicialização começa. É nesse momento que o Ignition carrega o arquivo de configuração e provisiona o sistema conforme especificado.

For more advanced ISO installs, including automation, see below.

Confira coreos-installer install --help para mais opções sobre como instalar o Fedora CoreOS.

Instalando do PXE

Para instalar do PXE, siga as seguintes etapas:

  • Baixe uma imagem kernel, initramfs e rootfs de FCOS PXE:

podman run --privileged --pull=always --rm -v .:/data -w /data \
    quay.io/coreos/coreos-installer:release download -f pxe
Iniciar a imagem live PXE requer pelo menos 2 GiB de RAM. Com o argumento de kernel`coreos.live.roots url`, e 3Gib de outra forma. Você pode instalar em legacy(BIOS) ou em UEFI, independentemente do modo que o sistema operacional usará depois de instalado.
  • Siga este exemplo pxelinux.cfg para inicializar as imagens do instalador com PXELINUX:

DEFAULT pxeboot
TIMEOUT 20
PROMPT 0
LABEL pxeboot
    KERNEL fedora-coreos-32.20200726.3.1-live-kernel-x86_64
    APPEND initrd=fedora-coreos-32.20200726.3.1-live-initramfs.x86_64.img,fedora-coreos-32.20200726.3.1-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.1.101:8000/config.ign
IPAPPEND 2

Para mais detalhes sobre como usar essas informações, consulte esta publicação de blog para testar uma instalação de PXE por uma VM local e libvirt.

Instalando do contêiner

Você pode usar o contêiner coreos-installer de um sistema existente para instalar em um dispositivo de bloco conectado. Por exemplo (substitua docker por podman se necessário):

sudo podman run --pull=always --privileged --rm \
    -v /dev:/dev -v /run/udev:/run/udev -v .:/data -w /data \
    quay.io/coreos/coreos-installer:release \
    install /dev/vdb -i config.ign

Neste exemplo, coreos-installer irá baixar a última imagem de FCOS estável e instalá-la em /dev/vdb. Em seguida, ele injetará o arquivo Ignition config.ign no diretório atual na imagem. Use --help para ver todas as opções disponíveis.

Baixando e espelhando a imagem

Às vezes, é necessário fazer o download da imagem com antecedência e depois transferi-la localmente para o coreos-installer para instalação. Você pode baixar a imagem diretamente de página de download do FCOS, ou pode usar o coreos-installer download.

Ao instalar via ISO ao vivo ou PXE, não há necessidade de baixar a imagem. Já faz parte desses ambientes.

Existem duas imagens: uma para discos de setor de 512b (rotulada como "Raw" na página de download) e uma para discos nativos de setor de 4k (rotulada "Raw (4K Native)"). A menos que você saiba que tem como alvo um disco nativo de 4k, use o 512b, que é o mais comum. Consulte esta página para mais informações.

Para baixar a imagem nativa 4kn com coreos-installer download, use a opção --format 4k.raw.xz.

A imagem usa um layout de partição híbrido que suporta inicialização por BIOS e UEFI.

Quando estiver finalmente pronto para instalar o FCOS, você pode apontá-lo para sua imagem baixada usando coreos-installer install --image-url <ESPELHO_LOCAL> ou coreos-install --image-file <CAMINHO>.

PXE live

Neste modelo, em vez de realizar uma instalação "persistente" no disco, você pode executar diretamente da RAM. Isso é útil, por exemplo, cenários "sem disco". As etapas são semelhantes às acima, apenas omita os argumentos de coreos.inst e, em vez disso, faça com que o próprio sistema execute o Ignition:

DEFAULT pxeboot
TIMEOUT 20
PROMPT 0
LABEL pxeboot
    KERNEL fedora-coreos-32.20200726.3.1-live-kernel-x86_64
    APPEND initrd=fedora-coreos-32.20200726.3.1-live-initramfs.x86_64.img,fedora-coreos-32.20200726.3.1-live-rootfs.x86_64.img ignition.firstboot ignition.platform.id=metal ignition.config.url=http://192.168.1.101/config.ign systemd.unified_cgroup_hierarchy=0
IPAPPEND 2

Imagens rootfs PXE

Antes de agosto de 2020, a imagem Fedora CoreOS PXE incluía dois componentes: uma imagem kernel e uma imagem initramfs. A partir de agosto, uma terceira imagem rootfs foi adicionada. A partir de 6 de outubro, a imagem `rootfs`é obrigatória e o sistema PXE ativo não inicializará sem ela.

Para inicializar com o artefato rootfs, faça uma das seguintes alterações em sua configuração PXE:

  • Especifique apenas o arquivo initramfs como initrd e passe uma URL HTTP(S) para rootfs usando o argumento de kernel coreos.live.rootfs_url=.

  • Especifique os arquivos initramfs e rootfs como initrds em sua configuração PXE. Isso pode ser feito através de múltiplas diretivas initrd, ou usando parâmetros initrd= adicionais como argumentos do kernel.

  • Concatene os arquivos initramfs e rootfs juntos e especifique o arquivo combinado como initrd.

Para mais informações sobre esta alteração, veja este relatório de problemas.

Automated ISO/PXE installs with Ignition embedding

The Fedora CoreOS live environment is also CoreOS in the sense that it can boot via Ignition, execute containers, etc. It includes all of the same content.

As noted above for live PXE, the ISO live environment does not have to actually perform a persistent installation. You can boot it from a read-only medium such as a physical CD-ROM/DVD, and do everything you do on any other Fedora CoreOS environment. It also works to boot from a USB stick. Each boot will re-run the Ignition config, and changes will not persist by default.

For the ISO, the mechanism to do this is coreos-installer ignition iso embed, which will create a new .iso file that combines your configuration with the ISO. Similarly, there is coreos-installer pxe ignition wrap for the PXE case.

However, many system administrators will want to perform fully unattended persistent installations instead of running stateless.

Some documentation on this is on the upstream installer site: customizing install.

To emphasize, there are two Ignition configurations here; the first config ("ISO Ignition") will commonly embed a second rendered configuration that runs on the "target" installation.

First, generate target.ign (the file can be named anything) - the configuration that will be passed to coreos-installer. Then, using e.g. butane, embed it as a file in your ISO ignition, and use a custom systemd unit to pass it to coreos-installer:

variant: fcos
version: 1.1.0
storage:
  files:
    - path: /etc/target.ign
      contents:
        inline: |
          Replace this bit with a real butane directive that
          fetches the target Ignition however you like e.g.:
          local: target.ign
      mode: 0644
systemd:
  units:
    - name: my-coreos-installer.service
      enabled: true
      contents: |
        [Unit]
        Description=Run CoreOS Installer
        Requires=coreos-installer-pre.target
        After=coreos-installer-pre.target
        OnFailure=emergency.target
        OnFailureJobMode=replace-irreversibly

        # Can be removed if install doesn't reference remote resources with
        # --stream, --image-url, or --ignition-url
        After=network-online.target
        Wants=network-online.target

        [Service]
        Type=oneshot
        ExecStart=/usr/bin/coreos-installer install -i /etc/target.ign /dev/sda
        ExecStart=/usr/bin/systemctl --no-block reboot
        StandardOutput=kmsg+console
        StandardError=kmsg+console

        [Install]
        RequiredBy=default.target

Note that this configuration is completely independent of the config passed for the ISO/PXE boot, in the sense that e.g. no systemd units and files written from the live Ignition will be preserved when booted into the final installed system, unless you take explicit action to preserve it.

There is however explicit support for copying network configuration with coreos-installer.

A generally useful technique is to add more systemd units that run before or after the systemd unit that invokes coreos-installer. For example, you can run a systemd unit which pulls a container and does hardware validation.

An example post-install action: Some provisioning systems may require a callback to the PXE server to be switched to "boot from local disk" via a HTTP request; this can similarly be done via a systemd unit that is scheduled After=my-coreos-installer.service that uses ExecStart=/usr/bin/curl or pulling a container which makes the HTTP request.

ISO installation on diverse hardware

Commonly bare metal systems will have a diversity of hardware - some systems may have NVMe drives /dev/nvme*, whereas others have /dev/sd* for example. You will almost certainly have to template the value of /dev/sda above.

A useful approach is to script generating a per-machine .iso. If you have a hardware database (whether a text file in git or relational database) then it will work to generate a per-machine target-dell.ign and target-hp.ign for example, embed that with the generic iso.ign to generate fedora-coreos-install-dell.iso and fedora-coreos-install-hp.iso.

Alternatively, instead of generating per-machine ISOs, you can have the ISO Ignition pull a privileged container which inspects the target system, and dynamically invokes coreos-installer.