Preskoči na sadržaj

Konfiguracija cloud slike korištenjem cloud-inita

Slike operacijskih sustava namijenje za korištenje u oblaku sadrže sustav cloud-init koji omogućuje postavljanje:

  • zadanih lokalnih i regionalnih postavki
  • imena domaćina
  • zaporki korisnika
  • SSH ključeva koji se mogu koristiti za prijavu
  • diskova koji će biti montirani

Sustav cloud-init u proteklom je desetljeću postao de facto standard za konfiguraciju slika koje se pokreću u oblaku; uz velike pružatelje usluga u oblaku, među koje spadaju Amazon Web Services (AWS), Google Cloud Platform (GCP) i Microsoft Azure, podržavaju ga i manji pružatelji kao što su DigitalOcean, Vultr, Scaleway i Hetzner. Osim navedenih (i drugih) pružatelja usluga u oblaku, podržani su i drugi izvori konfiguracijskih podataka.

Na strani razvijatelja distribucija Linuxa, slike koje uključuju cloud-init nude Arch Linux, Fedora, CentOS/AlmaLinux/Rocky Linux, Debian, Ubuntu, SmartOS i brojni drugi distributeri.

Upute u nastavku namijenjene su za Arch Linux i služe kao nadopuna upute sa stranice cloud-init na ArchWikiju.

Među dostupnim slikama u odjeljku VM images na stranici Arch Linux Downloads koristit ćemo sliku koja sadrži cloudimg (kratica od cloud image) u nazivu, npr. Arch-Linux-x86_64-cloudimg-20230415.143140.qcow2.

Kako se naš virtualni stroj ne pokreće u oblaku koji bi mogao poslužiti kao izvor konfiguracijskih podataka, i nastavku opisujemo kako stvoriti izvora podataka u obliku ISO 9660 slike CD-ROM-a koji ćemo umetnuti u virtualni CD-ROM čitač kod stvaranja virtualnog stroja.

Datoteka user-data

Kako bismo postavili zaporku korisnika na fidit1234, treba nam zaporka u hashiranom obliku. Iskoristit ćemo OpenSSL-ovu naredbu passwd (dokumentacija) na način:

$ openssl passwd -6 -salt 0123456789abcdef fidit1234
$6$0123456789abcdef$dShpkpJZaM1mate.CGJEnCIUr5OnqlKLzqgErqxukBdgGMteNCAMRA/3WWVZBOwsX444nHdSAmYpJcq09V5SP1

RSA ključ ćemo izgenerirati naredbom ssh-keygen (dokumentacija) na način:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vedranm/.ssh/id_rsa): id_rsa_gaser
ksshaskpass: Unable to parse phrase "Enter passphrase (empty for no passphrase): "
ksshaskpass: Unable to parse phrase "Enter same passphrase again: "
Your identification has been saved in id_rsa_gaser
Your public key has been saved in id_rsa_gaser.pub
The key fingerprint is:
SHA256:0x2Zhd3h8WdYte5i4gU/wc+2EBQyrHTX5zwukaOlnME vedranm@spqr
The key's randomart image is:
+---[RSA 3072]----+
|          .o +o+=|
|         . o+=++*|
|        . + =.o==|
|         o Eo*.o+|
|        S o.B++..|
|         . =o.*. |
|           . B.= |
|          . + = .|
|           .   . |
+----[SHA256]-----+

Uzmimo da je dobiveni tajni ključ oblika:

-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

dok je javni ključ oblika:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDdBUhfvkHUpPT41jk4TNTbb8bZ44mH8BsXbZskqb5VjcJD7S5NyaB3vI7r0vKz3Vkd1PeV3M
FZTnn2YH/RFmyQ5G2nL/XQRgzRXBKHNU4oSOsDGnW4Xpuis0+PE+ODRTB9qNIVCpM31J2v1AT5DUp393Lgda1yBFMlmk74sUIsWV2HCAy2UgD5
pOr5z5hYopIBodQc0rq6y3PgzyYuQwBZRAWiCbAVIYEmToUmdBO6bqY+yHE3KG+WF/x+CP58vX3dVgVV9x/XkIerc0RxjMeAHUd+fMYQJ9BqFW
Gc2OSvYIvqmQ71U1geaSTk1FmpKAe5oNu3C48ax2TkJr5k06j//uCnB3MissrkK3kpJvPRhoWdg261zvBcCzITT+X4nlNeneINE33p3Y5C10GR
9vDiYXvfYZlnQoU3XY6vKfNMp4BYRDyPRSRHAgoX4pQZKPRcSj0nzxtdlSapwMpGcPOxTEoL+OhNVGXcgjGkox7YQ+fQZPMUcg2qi+EcKnvae5
c= gaser@fidit

Pripremimo datoteku user-data tako da je oblika:

#cloud-config
users:
  - name: gaser
    gecos: Član grupe GASERI
    groups: wheel, adm
    sudo: ALL=(ALL) NOPASSWD:ALL
    lock_passwd: false
    passwd: $6$0123456789abcdef$dShpkpJZaM1mate.CGJEnCIUr5OnqlKLzqgErqxukBdgGMteNCAMRA/3WWVZBOwsX444nHdSAmYpJcq09V5SP1
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDdBUhfvkHUpPT41jk4TNTbb8bZ44mH8BsXbZskqb5VjcJD7S5NyaB3vI7r0vKz3Vkd1PeV3MFZTnn2YH/RFmyQ5G2nL/XQRgzRXBKHNU4oSOsDGnW4Xpuis0+PE+ODRTB9qNIVCpM31J2v1AT5DUp393Lgda1yBFMlmk74sUIsWV2HCAy2UgD5pOr5z5hYopIBodQc0rq6y3PgzyYuQwBZRAWiCbAVIYEmToUmdBO6bqY+yHE3KG+WF/x+CP58vX3dVgVV9x/XkIerc0RxjMeAHUd+fMYQJ9BqFWGc2OSvYIvqmQ71U1geaSTk1FmpKAe5oNu3C48ax2TkJr5k06j//uCnB3MissrkK3kpJvPRhoWdg261zvBcCzITT+X4nlNeneINE33p3Y5C10GR9vDiYXvfYZlnQoU3XY6vKfNMp4BYRDyPRSRHAgoX4pQZKPRcSj0nzxtdlSapwMpGcPOxTEoL+OhNVGXcgjGkox7YQ+fQZPMUcg2qi+EcKnvae5c= gaser@fidit

Ovdje smo postavili korisničko ime na gaser, komentar korisnika na Član grupe GASERI (za više detalja proučite odjeljak Other examples of user management stranice Users and Groups na ArchWikiju), dodali korisnika u grupe administratorske grupe wheel i adm (za više detalja proučite odjeljak User groups stranice Users and Groups na ArchWikiju), isključili zaključavanje zaporke, postavili zaporku na fidit1234 i SSH ključ na ranije navedeni.

Konfiguracijska datoteka user-data je u formatu YAML, ali cloud-init je prilično izbirljiv oko sintakse pa je potrebno paziti da su retci adekvatno uvučeni i da nema suvišnih razmaka na kraju retka.

Za više primjera konfiguracije proučite odjeljak Cloud config examples u službenoj dokumentaciji cloud-inita. Za značenje pojedinih ključeva proučite odjeljak Module reference, a za način korištenja parametara naredbenog retka odjeljak CLI commands.

Zadatak

Istražite kako možete korištenjem cloud-inita stvoriti datoteku fidit.txt sa sadržajem najjači fakultet u korisničkom direktoriju te pokrenuti naredbu ping -c 3 example.group.miletic.net.

Alat cloud-localds

Alat cloud-localds iz paketa cloud-utils se može koristiti za generiranje ISO 9660 slike umjesto xorriso (kako je opisano u odjeljku QEMU stranice Cloud-init na ArchWikiju).

Taj alat služi za pripremu slike diska u odgovarajućem formatu za cloud-init izvor konfiguracijskih podataka (engl. data source, odakle dolazi ds u localds) NoCloud (dokumentacija). Taj će se disk uključiti prilikom stvaranja virtualnog stroja u posljednjem koraku kao drugi disk i cloud-init će ga očitati prilikom prvog pokretanja. Alat cloud-localds kod pokretanja bez argumenata pokazuje pomoć pri korištenju:

$ cloud-localds
Usage: cloud-localds [ options ] output user-data [meta-data]

   Create a disk for cloud-init to utilize nocloud

   options:
     -h | --help             show usage
     -d | --disk-format D    disk format to output. default: raw
                             can be anything supported by qemu-img or
                             tar, tar-seed-local, tar-seed-net
     -H | --hostname    H    set hostname in metadata to H
     -f | --filesystem  F    filesystem format (vfat or iso), default: iso9660

     -i | --interfaces  F    write network interfaces file into metadata
     -N | --network-config F write network config file to local datasource
     -m | --dsmode      M    add 'dsmode' ('local' or 'net') to the metadata
                             default in cloud-init is 'net', meaning network is
                             required.
     -V | --vendor-data F    vendor-data file
     -v | --verbose          increase verbosity

   Note, --dsmode, --hostname, and --interfaces are incompatible
   with metadata.

   Example:
    * cat my-user-data
      #cloud-config
      password: passw0rd
      chpasswd: { expire: False }
      ssh_pwauth: True
    * echo "instance-id: $(uuidgen || echo i-abcdefg)" > my-meta-data
    * cloud-localds my-seed.img my-user-data my-meta-data
    * kvm -net nic -net user,hostfwd=tcp::2222-:22 \
         -drive file=disk1.img,if=virtio -drive file=my-seed.img,if=virtio
    * ssh -p 2222 ubuntu@localhost
must provide output, userdata

Stvorimo sliku diska naredbom:

$ cloud-localds user-data.img user-data

Preuzmimo cloudimg Arch Linuxa s nekog od službenih izvora i ponovimo stvaranje virtualnog stroja na temelju slike. U posljednjem koraku ćemo iskoristiti mogućnost prilagodbe konfiguracije uključivanjem kvačice pored Customize configuration before install. U dijalogu koji dobijemo odabrati ćemo Add Hardware pa u odjeljku Storage na kartici Details odabrati Select or create custom storage. Klikom na gumb Manage... dobivamo Locate or create storage volume gdje možemo iskoristiti gumb Browse Local kako bismo pronašli upravo stvoreni user-data.img. Dodatno, Device type postavit ćemo na CDROM device.

Nakon pokretanja Arch Linuxa moći ćemo se prijaviti s postavljenim korisničkim imenom i zaporkom.

Zadatak

Nakon uspješne prijave proučite informacije o mjestu gdje se nalaze zapisnici u često postavljanim pitanjima i provjerite sadržaj logova za upozorenjima i greškama.

Author: Vedran Miletić