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:
- posar una ISO d'instal·lació dins d'Isard: la biblioteca de mitjans;
- instal·lar-hi un sistema operatiu en un escriptori a partir d'aquesta ISO;
- 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.
- Escriu un perfil de construcció per a un servidor Ubuntu LTS amb les eines que necessita el teu curs, per exemple
git,curl,docker.ioipython3. - Afegeix un pas
run:que afegeixi l'usuari al grupdocker, i una entradafiles:que escrigui un/etc/motdamb el nom de la plantilla i la data. - Comprova'l amb
--dry-runfins que no doni cap error. - Construeix-lo amb
--keep-media, perquè una segona construcció no torni a baixar la ISO. - Fes un escriptori a partir de la plantilla acabada i demostra que
docker run hello-worldfunciona sensesudo.
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.