He hagut de fer servir les meves paraules d’estiu per qüestions personals i professionals; així que la continuació d’aquell fil d’idees ha trigat una mica en arribar.
Per coses de la vida, aquests dies ha arribat un mini-server a les meves mans. Així que agafarem un petit desviament en coses “tècniques” abans de tornar al per què, que és segurament la única cosa que importa al final.
Aquí agafarem aquest mini-server i hi instal·larem FreeBSD com a sistema operatiu.
Per què és interessant? Doncs aquesta màquina tindrà certs serveis digitals que sempre està bé tenir sota el nostre control.
I el procés, des de zero, no és una cosa que es documenti habitualment en aquesta llengua ;-).
FreeBSD és un “Sistema Operatiu obert i gratuït, semblant o compatible amb Unix”.
Això, pels que som resultat dels mitjans i l’educació digital que ens forma per ser consumidors passius, potser implica directament hores i hores de lectura.
Anem a fer-ho una mica més fàcil:
Perquè funciona, funciona bé, i és senzill d’administrar.
Això no vol dir que altres sistemes no funcionin bé o siguin difícils d’administrar; fins a un cert punt, el tema va “a gustos”.
Bàsicament, en aquest punt de la meva vida professional, me’n surto força bé amb el sistema que em posin davant; ara, també tinc clar que FreeBSD (i OpenBSD en alguns casos) és el que em permet fer més, més ràpid, i sense preocupar-me gaire del com perquè la càrrega mental associada és mínima.
Naturalment hi ha altres alternatives que compleixin amb “obert i gratuït”, per exemple Linux; però hi ha tendències preocupants al món de Linux actualment.
Un altre factor per no fer servir Linux és que la experiència ja m’ha portat a “aprendre Linux” tres vegades a la meva vida (sense comptar haver fet servir diverses distribucions, que fins a cert punt són cadascuna un món). És a dir, canvia massa ràpid i en general sense prou bons motius; o bé perquè els canvis es fan massa ràpid i s’arriba a solucions poc ideals o bé perquè els problemes que s’hi estan solucionant, són els problemes de quatre empreses, i no els problemes dels usuaris.
Els sistemes BSD es desenvolupen en conjunt, és a dir que quan obtenim el codi font o un binari, realment estem obtenint tot el que ens cal per compilar o instal·lar un sistema operatiu sencer amb: kernel (o nucli, més o menys la part que parla amb allò físic), i utilitats d’usuari (o world).
Sense les utilitats d’usuari, no tindríem manera d’interactuar amb el kernel, i per tant amb l’ordinador.
I, sense el kernel, els programes no poden parlar amb la part física, i per tant són capaços ni d’ensenyar-nos alguna cosa per pantalla (és una aproximació més o menys intuïtiva i no 100% acurada).
Això sembla una diferència menor, però realment és un gran avantatge; en tenir control de les utilitats d’usuari i també del kernel, hi ha també una co-responsabilitat, és a dir, si es vol introduir un canvi en el kernel, es fa necessari fer en paral·lel els canvis adients a les utilitats d’usuari.
I també si es fan canvis en una utilitat d’usuari, cal assegurar-se que les altres utilitats que fan part del sistema operatiu, mantinguin una compatibilitat i consistència general.
Això, al món de Linux no és possible, perquè les utilitats d’usuari solen ser “GNU” (o busybox) i Linux és únicament el kernel. D’aquesta manera, la responsabilitat pels canvis es mou d’una banda a l’altra, i, molt sovint, els canvis no tenen lloc, i s’acaben generant noves eines per salvaguardar les limitacions de les eines existents.
Per exemple, ifconfig
, la comanda tradicional per administrar interfícies de xarxa,
a Linux es considera arcaica, perquè ara existeix ip
.
I no és que ip
sigui dolent, és que és un canvi, que només és necessari, perquè
els problemes inherents al sistema de desenvolupament
no són adreçables.
En canvi, als BSD, ifconfig
és molt més potent del que mai ho va ser a Linux i
també te molt més sentit; aquest desenvolupament conjunt del kernel i les utilitats
d’usuari hi te molt a veure.
Com sempre, el primer pas és descarregar l’instal·lador, això en en aquest cas es fa al web de FreeBSD.
Ens trobem amb la primera decisió: quina versió triem? Depèn de l’ús de cada, així que anem a entendre com funcionen.
Hi ha 3 línies del sistema operatiu suportades. Per mantenir-se al dia, recomanaria subscriure’s a la llista d’anuncis de FreeBSD.
Com a regla general, per un sistema que vulguem que funcioni sense problemes, recomanaria fer servir sempre l’última versió suportada de RELEASE.
Aquesta és la línia de desenvolupament, literalment és on vénen a parar tots els canvis, tant al kernel com a les utilitats d’usuari. Per aquest motiu, no es recomana per usuaris novells, sinó per aquells que vulguin ajudar el desenvolupament, encara que sigui només provant i trobant problemes. Havent dit això, la línia de desenvolupament sol ser molt estable, hi ha empreses com Netflix que actualitzen un parell de vegades al mes a la línia de desenvolupament i jo ho faig gairebé a diari al meu sistema principal.
Al món de BSD hi ha una dita, i és que si no vols que els bugs/problemes t’arribin, els has de trobar tu abans. Com més persones ajudin a provar la línia de desenvolupament, més segurs podem estar que les altres línies de suport no tenen grans problemes.
Quan ja ha passat un temps (mínim dos anys) i les persones que desenvolupen el sistema troben que és el moment, aquesta línia es “congela” i després d’una feina de solucionar problemes diversos, acabar d’actualitzar documentació i demés, s’acaba convertint en una versió RELEASE.
Aquesta és l’última versió major (en aquest cas 12, amb 1 essent la versió menor). Des del moment en que es va publicar la versió 12.0, aquesta línia de desenvolupament te garantit el suport (actualitzacions de seguretat, disponibilitat de binaris oficials, …) un mínim de 5 anys.
És a dir, que FreeBSD 12 te suport, com a mínim, fins el 30 de Juny de 2024.
Ara, quan es publica una versió menor, com ara la 12.2 que vindrà aviat, la versió menor anterior (l’actual 12.1) deixa de ser suportada 3 mesos després.
És a dir, que tenim un període de 3 mesos per fer una actualització menor; és una cosa que cal tenir en compte. Normalment s’avisa amb mesos d’antelació.
Les versions STABLE són antigues RELEASE que encara estan suportades, és a dir, des que es va publicar FreeBSD 11.0, s’ha publicat la 12.0.
Però com que la versió FreeBSD 11 te suport garantit de 5 anys, seguirà existint, com a mínim, fins el 10 d’octubre de 2021.
Ara, veiem que a data d’avui hi ha dues versions de FreeBSD 11, això vol dir que fa menys de 3 mesos que es va publicar la versió 11.4 i, per tant, la versió 11.3 encara està suportada.
En efecte, FreeBSD 11.4 es va publicar el 16 de juny de 2020, i per tant FreeBSD 11.3 deixa de tenir suport el 30 de setembre de 2020.
A data d’avui, amb el criteri que he explicat anteriorment, ens decidiríem per FreeBSD 12.1, així que podem descarregar la imatge d’instal·lació (també hi ha imatges per màquines virtuals pre-instal·lades).
En general, voldrem descarregar el fitxer -disc1.iso
de la nostra arquitectura de hardware, si no sabem el que és, segurament sigui amd64
.
És a dir que volem el fitxer FreeBSD-12.1-RELEASE-amd64-disc1.iso
.
Pels paranòics entre nosaltres, els anuncis d’una nova versió també es publiquen signats. I el llistat de claus PGP del projecte es troba al famòs Handbook de FreeBSD.
Comprovant la signatura, i després la integritat del fitxer, podem estar segurs que el fitxer que hem descarregat, és el fitxer que les persones que desenvolupen el sistema operatiu han generat.
Un cop l’hem descarregat, hi ha utilitats que ens ajuden a gravar aquesta imatge en un CD o, molt millor, en un USB.
Si heu descarregat la imatge sota Windows, rufus és un programa molt bo per fer-ho.
Si, en canvi, ho heu fet en Linux o en un Mac, el més senzill és fer-ho amb la comanda dd
(si algú te un mètode més “gràfic”, que m’avisi ;-)).
En particular:
# dd if=FreeBSD-12.1-RELEASE-amd64-disc1.iso \
of=/dev/EL_MEU_USB bs=1m conv=sync
Cal que us assegureu de reemplaçar EL_MEU_USB
amb el nom del vostre USB,
recordeu que si us equivoqueu molt, això pot voler dir perdre les vostres dades!
Havent escrit la imatge al meu USB, engego el micro-server iniciant des de l’USB.
I ara ve la part “fàcil”, on un menú ens anirà guiant per instal·lar FreeBSD; la majoria de les decisions es poden canviar un cop instal·lat el sistema, així que no és molt crític, i els valors per defecte són raonables en general.
Install
, Shell
i LiveCD
; volem Install
.kernel-dbg
i lib32
que no em fan falta (tampoc fa mal deixar-los)Auto (ZFS)
)Pool Type/Disks
i trio stripe
en el disc dur que vullEncrypt Swap
com YES
Install: Proceed with installation
sshd
, ntpd
i powerd
, desactivo dumpdev
(es pot canviar a posteriori)System Hardening
(es pot canviar a posteriori)Exit
per indicar que ja hem instal·lat el sistemashell
) al nou sistema abans de reiniciar/etc/sshd/sshd.conf
amb vi /etc/sshd/sshd.conf
per habilitar les sessions remotes de super usuari canviant #PermitRootLogin no
per PermitRootLogin yes
(ho canviarem tot seguit, no és una configuració gens segura)exit
Reboot
i trec l’USB d’instal·lacióÉs a dir, que esperem un total de 2 minuts i contestem preguntes majoritàriament senzilles; el procès triga en total uns 5 minuts si ja coneixem les preguntes i uns 20 minuts si no.
Compte! Durant la instal·lació hem près una decició temporal que cal desfer tan aviat com sigui possible: hem de deshabilitar l’inici de sessió remot amb contrasenya.
Si no ho fem, com que hem deixat accés de super usuari remot amb contrasenya, potencialment, algú a la nostra xarxa podria intentar esbrinar la contrasenya i fer-se amb el control de l’equip.
El motiu d’aquesta decisió és, que jo faig servir autenticació amb claus públiques, però configurar aquesta autenticació només amb un teclat és una mica farragós.
Per això inicio sessió al micro-server amb usuari root
i la contrasenya que he configurat abans.
Executo:
# ifconfig
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
ether XX:XX:XX:XX:XX:XX
inet6 fe80::9640:XXXX:XXXX:XXXX%bge0 prefixlen 64 scopeid 0x1
inet6 2a0f:de00:X:X:X:X:X:X prefixlen 64 autoconf
inet 192.168.1.12 netmask 0xfffff000 broadcast 192.168.1.255
media: Ethernet autoselect (1000baseT <full-duplex>)
status: active
nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
Que em diu que la IP local de la màquina és 192.168.1.12
.
I llavors des del meu ordinador:
> ssh root@192.168.1.12
root@host:~ # mkdir .ssh; chmod 700 .ssh
root@host:~ # echo 'ssh-rsa AAAAB3NzaC1yc2EAAA[..] evilham.pgp_auth' \
> .ssh/authorized_keys
root@host:~ # chmod 400 .ssh/authorized_keys
És a dir, configuro la meva clau pública per iniciar sessió (els detalls… són tema d’un altre dia).
I ara ja puc desactivar l’inici de sessió amb contrasenya amb vi /etc/ssh/sshd_config
i canviant PermitRootLogin yes
per PermitRootLogin without-password
i reiniciant el servei amb service sshd restart
.
Fins aquí avui, ara tenim un sistema FreeBSD instal·lat de nou, que servirà com a base per fer-hi “qualsevol cosa”.
Abans d’això caldrà configurar el sistema d’una manera una manera més segura, i d’una manera automatizada, per si mai cal reinstal·lar-ho.
Totes aquestes coses les configuro automàticament amb cdist, que és un tema prou gran per per un altre dia.
PS: 2826 paraules han estat escrites pels micos infinits.