Salta al contingut
Pàgines de la documentació

Documentació

Plantilles

D'on surten les plantilles d'IsardVDI, i com construir-ne una de pròpia a partir d'un sol fitxer YAML amb isard build.

Parteix de Bastió.

Introducció

Tots els escriptoris que has fet fins ara surten d'una plantilla, i l'has triada d'una llista que ha fet algú altre.

Aquesta llista és la del teu centre, és curta i és antiga.

Tard o d'hora un exercici necessitarà alguna cosa que no hi és: una Fedora quan el centre només té Ubuntu, una màquina amb Docker ja instal·lat perquè trenta alumnes no hagin de passar deu minuts cadascun instal·lant-lo, una imatge base amb la teva clau SSH ja posada.

Una plantilla no té res de màgic. És un escriptori que algú ha aturat i congelat:

architecture-beta
     service iso(disk)[ISO]
     service desktop(server)[Desktop]
     service template(database)[Template]

     iso:R -- L:desktop
     desktop:R -- L:template

Tres passos, i aquesta pàgina tracta aquests tres:

  1. posar una ISO d'instal·lació dins d'Isard: la biblioteca de mitjans;
  2. instal·lar-hi un sistema operatiu en un escriptori a partir d'aquesta ISO;
  3. promoure aquest escriptori a plantilla.

I després, fer-los tots tres amb una sola ordre.

La biblioteca de mitjans

Isard anomena mitjà una ISO pujada, i cada compte en té una biblioteca.

$ isard media
NAME                              STATUS      SIZE     OWNER
Fedora-Server-netinst-x86_64-44   Downloaded  1.1 GB   you
ubuntu-24.04.4-live-server        Downloaded  3.2 GB   shared

shared vol dir que algú del teu centre l'ha publicada per a tothom. you vol dir que l'has afegida tu i que compta per a la teva quota.

Per afegir-ne una cal un URL, no un fitxer:

$ isard media add ubuntu-24 --url https://releases.ubuntu.com/24.04/ubuntu-24.04.4-live-server-amd64.iso
⠹ Downloading ubuntu-24 ... 61% (2.0 GB)
✓ Media 'ubuntu-24' downloaded

La descarrega Isard, no tu. No hi ha cap manera de pujar fitxers: dones a la plataforma una adreça https:// i el seu propi descarregador baixa el fitxer.

Això és bo amb la connexió d'un institut, i és una limitació el primer cop que tens una ISO en un llapis USB i enlloc on posar-la.

L'ordre espera per defecte i mostra el progrés. --no-wait torna immediatament, i després amb isard media en pots seguir l'estat.

Esborrar fa el que esperes:

$ isard media delete ubuntu-24
Delete media 'ubuntu-24'? [y/N]: y
✓ Media deleted

A mà, al navegador

Ara que hi ha una ISO a la biblioteca, pots arrencar un escriptori des d'ella.

A la vista de mitjans, la icona de la fila genera un escriptori a partir d'aquell mitjà:

Obre el formulari de creació de sempre, però el dispositiu d'arrencada és la ISO en lloc d'una plantilla:

Per a una Fedora Server, la configuració que importa és:

Arrencada CD/DVD
Bus del disc virtio
Disc 100 GB
Xarxa Default i Wireguard VPN

Arrenca'l, obre el visor i instal·la el sistema operatiu exactament com ho faries en una màquina real.

Després (i aquest és el pas que la gent es salta) atura la màquina i edita-la abans de fer res més:

Arrencada Disc dur
Mitjà Cap
Bus del disc Per defecte

Si te'l saltes, el microprogramari torna a trobar la ISO d'instal·lació a la propera arrencada i et proposa tan tranquil reinstal·lar a sobre del que acabes de construir.

Promoure

Ara tens un escriptori amb un sistema operatiu. Convertir-lo en plantilla és una sola ordre:

$ isard template promote fedora-base --name fedora-44-base -d 'Fedora 44 Server, docker preinstalled'
Matched: 'fedora-base'
✓ Template 'fedora-44-base' created

Dues condicions, i totes dues les comprova la plataforma, no l'eina:

  • l'escriptori ha d'estar Stopped (aturat);
  • el seu disc s'ha d'haver escrit de debò: un escriptori creat i mai arrencat no és un origen vàlid.

--disabled crea la plantilla oculta, que és el que vols si l'has de revisar abans que la faci servir una classe.

Tot plegat, en un fitxer

Tot el que hi ha a dalt són quatre ordres, un formulari, una instal·lació i una promoció, amb dues ocasions d'equivocar-te amb l'ordre d'arrencada.

isard build ho fa tot, descrit en un sol fitxer YAML.

# ubuntu.yaml
image:
  distro: ubuntu
  variant: server
  release: lts

template:
  name: ubuntu-lts-base
  description: Ubuntu LTS with docker and the class tooling
  vcpus: 4
  memory_gb: 8
  disk_gb: 100

user:
  name: isard
  password_env: ISARD_TEMPLATE_PASSWORD
  ssh_key: ~/.ssh/id_ed25519.pub

packages: [git, curl, docker.io]
run:
  - systemctl enable --now docker
  - usermod -aG docker isard

Mira el pla abans de dedicar-hi una tarda:

$ isard build ubuntu.yaml --dry-run
Resolving ubuntu server lts...
  ISO      ubuntu-24.04.4-live-server-amd64.iso  (3.2 GB)
  Desktop  ubuntu-lts-base  4 vCPU, 8192 MB, 100 GB
  User     isard
  Packages git, curl, docker.io
  Commands 2
  Promote  yes
Dry run: no API calls made.

--dry-run només consulta l'índex de versions del distribuïdor: cap sessió, cap crida a l'API, cap descàrrega.

És l'ordre que cal executar després de cada canvi al fitxer, perquè una errada en una clau és un error, no un avís:

$ isard build ubuntu.yaml --dry-run
✗ unknown key 'pakages' in profile

Aquesta rigidesa és volguda. Una clau ignorada en silenci és una clau que descobreixes vint minuts després d'haver començat una descàrrega de 3 GB.

Després executa-ho:

$ isard build ubuntu.yaml
⠹ Downloading ubuntu-24.04.4-live-server-amd64.iso ... 100%
✓ Desktop 'ubuntu-lts-base' created successfully!
✓ Bastion armed
⠹ Opening viewer — install the OS and shut the machine down

L'únic pas que és teu

L'instal·lador del sistema operatiu no es pot controlar des de fora, i la construcció no fa veure que sí: et dona el visor i espera.

Hi ha tres coses que han de coincidir, i la resta és cosa teva:

què on
1 el nom d'usuari de user.name la pantalla del compte de l'instal·lador
2 la contrasenya de user.password la mateixa pantalla
3 un servidor SSH Ubuntu: marca Install OpenSSH server. Fedora: tria l'entorn Server

Després apaga la màquina. No la reiniciïs.

La construcció espera que l'escriptori arribi a Stopped: no et demana res, així que pots marxar i continuarà sense tu.

✓ Desktop stopped — installation complete
✓ ISO detached, booting from disk
⠹ Waiting for SSH...
✓ Connected
⠹ Applying profile...
  hostname, locale, timezone
  packages: git, curl, docker.io
  run: 2 commands
✓ Template 'ubuntu-lts-base' created

El nom d'usuari i la contrasenya importen perquè el bastió entra al sistema convidat amb aquestes credencials, i és així com la construcció hi entra després per fer la resta.

Si t'hi equivoques a l'instal·lador, la fase de configuració no pot iniciar sessió, i aquesta és l'única fallada d'aquesta ordre que et fa perdre tota la instal·lació.

Quan l'SSH no respon mai

Gairebé sempre és que s'ha passat per alt l'opció d'OpenSSH a la pantalla de l'instal·lador.

La construcció sap reconèixer-ho i, en lloc d'esgotar el temps d'espera, mostra la solució i espera que l'executis a la consola del mateix escriptori:

$ curl -fsSL https://isard.xtec.dev/guest.sh | sudo sh -s isard mypassword

És la mateixa línia de Bastió, i és curta a propòsit: la consola on l'has d'escriure encara no té el porta-retalls operatiu, i aquesta és una de les coses que arregla.

Què més hi pots posar

clau què
hostname, timezone, locale, keyboard les avorrides, aplicades per SSH
packages una llista, instal·lada amb el gestor de paquets del sistema convidat
run ordres d'intèrpret d'ordres, per ordre, com a root
files rutes i continguts, escrits dins del sistema convidat

I tres opcions que val la pena conèixer:

--keep-media deixa la ISO a la biblioteca, perquè la propera construcció de la mateixa versió no torni a baixar 3 GB
--no-promote s'atura quan la màquina està construïda i configurada, i la deixa com a escriptori
--no-viewer no obre cap visor; obre tu la màquina

Desatesa, a mà

isard build cobreix el cas que et trobaràs de veritat.

Per sota hi ha un camí de més baix nivell que val la pena saber que existeix, perquè és com una instal·lació passa a ser del tot desatesa, sense ningú davant del visor.

L'instal·lador d'Ubuntu i el de Fedora llegeixen la configuració d'un segon CD, i el troben per l'etiqueta del volum:

etiqueta fitxer el llegeix
isard seed cidata CIDATA user-data cloud-init: autoinstall d'Ubuntu
isard seed oemdrv OEMDRV ks.cfg Anaconda: Fedora, RHEL, Rocky

Cap dels dos necessita cap argument a la línia d'ordres del nucli, i aquesta és la gràcia: el formulari de maquinari d'Isard no té on posar-lo.

Així que construeixes la petita ISO en local:

$ isard seed oemdrv --kickstart my-ks.cfg -o seed.iso
✓ Wrote seed.iso (374 KB)

La publiques en algun lloc per HTTPS i en passes l'URL:

$ isard template create --seed-url https://files.example.com/seed.iso

L'instal·lador arrenca, troba el segon CD, el llegeix i instal·la sense preguntar res.

Exercicis

ExerciciLlegeix la biblioteca

Llista els teus mitjans i digues, per a cadascun, si és teu o del teu centre.

Mostra la solució
$ isard media
NAME                              STATUS      SIZE     OWNER
Fedora-Server-netinst-x86_64-44   Downloaded  1.1 GB   you
ubuntu-24.04.4-live-server        Downloaded  3.2 GB   shared

La columna OWNER és la resposta, i importa per dos motius: un mitjà compartit no et gasta quota, i no el pots esborrar.

ExerciciUn perfil que falla barat

Escriu un perfil de construcció per a una plantilla Fedora Server amb git i htop, i comprova'l amb --dry-run sense construir res.

Després espatlla una clau a propòsit i torna-ho a comprovar.

Mostra la solució
# fedora.yaml
image:
  distro: fedora
  variant: server
  release: latest

template:
  name: fedora-class
  vcpus: 2
  memory_gb: 4
  disk_gb: 50

user:
  name: isard
  password_env: ISARD_TEMPLATE_PASSWORD

packages: [git, htop]
$ isard build fedora.yaml --dry-run
Resolving fedora server latest...
  ISO      Fedora-Server-netinst-x86_64-44-1.7.iso  (1.1 GB)
  Desktop  fedora-class  2 vCPU, 4096 MB, 50 GB
  User     isard
  Packages git, htop
  Promote  yes
Dry run: no API calls made.

$ isard build fedora.yaml --dry-run   # after renaming `packages` to `packge`
✗ unknown key 'packge' in profile

La segona execució és l'exercici. Un perfil que està malament ho ha de dir en dos segons, no en vint minuts.

ExerciciTres passos a mà

Sense fer servir isard build, converteix un escriptori en plantilla.

Fes servir una màquina amb què ja hagis acabat.

Mostra la solució
$ isard stop lab --wait
✓ Desktop 'lab' is stopped

$ isard template promote lab --name lab-base -d 'Class base image'
Matched: 'lab'
✓ Template 'lab-base' created

$ isard template --filter lab

-- Available Templates (filtered by 'lab') --
NAME      DESCRIPTION       OS
lab-base  Class base image  Ubuntu

I ara mira què diu isard list de lab:

$ isard list --name lab
No desktops found.

L'escriptori ja no hi és. El promote se l'ha consumit, i aquest és el comportament que t'has d'endur d'aquesta pàgina.

ExerciciPer què no compartir el disc i prou

Un company vol la màquina que has construït. La podries promoure a plantilla, o li podries donar les credencials perquè fes servir la teva.

Dona dos motius pels quals la plantilla és la resposta correcta.

Mostra la solució

Dos qualssevol d'aquests:

  • Una plantilla és una còpia. Deu persones tenen cadascuna la seva màquina i la poden espatllar. Una màquina compartida és una persona treballant i nou mirant.
  • Gasta quota un cop per persona, no un sol cop. Una màquina compartida ocupa la teva quota per a tota la classe.
  • És reproduïble. Una màquina que has configurat a mà durant tres setmanes no es pot reconstruir; una plantilla es pot tornar a fer a partir d'un perfil.
  • Ningú no s'ha de fiar de ningú. Compartir unes credencials vol dir compartir una contrasenya, i el compte és el teu.

L'últim val molt més enllà d'aquesta pàgina, i el tercer és el motiu pel qual existeix isard build.

Projecte

Construeix la màquina que la teva classe farà servir de veritat.

  1. Escriu un perfil de construcció per a un servidor Ubuntu LTS amb les eines que necessita el teu curs, per exemple git, curl, docker.io i python3.
  2. Afegeix un pas run: que afegeixi l'usuari al grup docker, i una entrada files: que escrigui un /etc/motd amb el nom de la plantilla i la data.
  3. Comprova'l amb --dry-run fins que no doni cap error.
  4. Construeix-lo amb --keep-media, perquè una segona construcció no torni a baixar la ISO.
  5. Fes un escriptori a partir de la plantilla acabada i demostra que docker run hello-world funciona sense sudo.
Mostra la solució
# class.yaml
image:
  distro: ubuntu
  variant: server
  release: lts

template:
  name: class-base
  description: Ubuntu LTS with docker and python
  vcpus: 4
  memory_gb: 8
  disk_gb: 100

user:
  name: isard
  password_env: ISARD_TEMPLATE_PASSWORD
  ssh_key: ~/.ssh/id_ed25519.pub

hostname: class-base
timezone: Europe/Madrid

packages: [git, curl, docker.io, python3]
run:
  - systemctl enable --now docker
  - usermod -aG docker isard
files:
  /etc/motd: |
    class-base — Ubuntu LTS, docker + python
    Built 2026-08-14 with `isard build`.
$ export ISARD_TEMPLATE_PASSWORD='una-contrasenya-llarga'
$ isard build class.yaml --dry-run
$ isard build class.yaml --keep-media

Després:

$ isard create demo --template class-base
$ isard start demo --wait
$ isard ssh demo -- 'docker run --rm hello-world'
Hello from Docker!

docker run sense sudo és el que demostra que el usermod s'ha executat, i val la pena comprovar-ho en lloc de donar-ho per fet: un canvi de grup només té efecte en un inici de sessió nou, i aquest és un inici de sessió nou.