Usar FreeBSD con GitHub Actions
Servidor
Published: 2024-12-22

Este artículo es el día 22 del Calendario de Aventuras de Sakura Internet 2024.

Introducción

Puede haber ocasiones en las que desees usar FreeBSD con GitHub Actions.
De hecho, como uso FreeBSD en Sakura Internet, hay ocasiones en las que simplemente necesito usarlo.

Actualmente, estoy utilizando Jenkins y un entorno FreeBSD mediante SSH para realizar compilaciones de una manera bastante laboriosa,
pero si se puede hacer con GitHub Actions, definitivamente preferiría hacerlo a través de GitHub Actions.

Usar Cross-Platform GitHub Action

Usando Cross-Platform GitHub Action, puedes usar FreeBSD.
Esto permite ejecutar otros sistemas operativos como máquinas virtuales utilizando Qemu sobre GitHub Actions.

Aunque es un enfoque bastante rudimentario, es muy útil poder utilizar FreeBSD en GitHub Actions.

Creación de acciones

Primero, crea un repositorio para usar Cross-Platform GitHub Action.

$ git init actions_freebsd
$ cd actions_freebsd

A continuación, crea el directorio .github/workflows y dentro de este, crea un archivo main.yml.

$ mkdir -p .github/workflows
$ vi .github/workflows/main.yml

En main.yml, escribe el siguiente contenido.

name: FreeBSD

on: push

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: probar freebsd 13.4
        uses: cross-platform-actions/action@v0.26.0
        with:
          memory: 512M
          operating_system: freebsd
          version: "13.4"
          shell: sh
          run: |
            uname -a            

Haz un git push para ejecutar GitHub Actions.

$ git remote add origin git@github.com:masa23/actions_freebsd.git
$ git add .
$ git commit -m "primer commit"
$ git branch -M main
$ git push origin main

Al ejecutar GitHub Actions, se ejecutará uname -a en FreeBSD 13.4.

Resultado de las acciones primer commit #1

¡Hemos podido usar FreeBSD fácilmente! 🎉

Imágenes personalizadas de FreeBSD

Creación de imágenes personalizadas

Usando freebsd-builder, puedes utilizar imágenes personalizadas de FreeBSD.

En el entorno real, especifico imágenes personalizadas para usarlas.
Avergonzadamente, a veces necesito que se ejecute FreeBSD más antiguo como el 11.2 o necesito una imagen con golang, por lo que
preparo y utilizo imágenes personalizadas.

Esta vez, voy a crear una imagen que instale gcc para usar golang y cgo en FreeBSD 13.4.

Clona el repositorio y crea una imagen personalizada.

$ git clone https://github.com/cross-platform-actions/freebsd-builder.git
$ cd freebsd-builder
  • Estoy utilizando custom.sh para crear la imagen personalizada.

Instalo gcc y Go para que se pueda realizar la construcción de CGO.

$ vi resource/custom.sh
#!/bin/sh

set -exu

# Agrega tu aprovisionamiento adicional aquí para imágenes de VM personalizadas.

GOLANG_VERSION=1.23.4

pkg install -y gcc
fetch -o - https://go.dev/dl/go${GOLANG_VERSION}.freebsd-amd64.tar.gz | tar xz -f - -C /usr/local/
ln -s /usr/local/go/bin/go /usr/local/bin/go

Configuración del entorno de construcción

sudo curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install -y qemu-system-x86 packer
packer plugins install github.com/hashicorp/qemu

Construcción de la imagen

PACKER_LOG=1 sudo -E bash ./build.sh 13.4 x86-64 -var headless=true
# ls -lh output/
total 664M
-rw-r--r-- 1 root root 664M Dec 20 16:29 freebsd-13.4-x86-64.qcow2

Lanzamiento

$ gh release create v0.0.1 --title "FreeBSD 13.4 añadir golang" --notes "FreeBSD 13.4" output/freebsd-13.4-x86-64.qcow2

Ejecutar CI usando la imagen

name: FreeBSD

on: 

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: prueba para freebsd 13.0
        uses: cross-platform-actions/action@v0.26.0
        with:
          memory: 512M
          operating_system: freebsd
          version: 13.4
          image_url: https://github.com/masa23/freebsd-builder/releases/download/v0.0.1/freebsd-13.4-x86-64.qcow2 # aquí especifica la URL de la imagen personalizada
          shell: sh
          run: |
            export CC=gcc
            go test -v ./...            

Comprobación del resultado de las acciones

Resultado de las acciones prueba golang cgo #3

Se ejecutó correctamente CI usando la imagen personalizada.

Conclusión

  • He presentado cómo usar FreeBSD con GitHub Actions.
  • Debes tener cuidado si usas mucha memoria con Qemu, pero pude usar FreeBSD fácilmente.
  • Dado que el uso de Qemu puede hacer que CI tarde más, parece mejor usarlo limitado a solicitudes de extracción o momentos de lanzamiento.