đž Archived View for it.omarpolo.com âş articoli âş un-server-cvs.gmi captured on 2021-11-30 at 20:18:30. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
Il ports tree di OpenBSD è gestito, cosĂŹ come il resto del progetto, usando CVS. CVS è un programma per la gestione delle versioni con diversi anni sulle spalle, e ormai credo che sia rimasto solo OpenBSD tra i âgrandiâ a usarlo.
Il progetto ha i suoi motivi per continuare a usare CVS e, personalmente, mi piace il feeling di CVS.
Ho pensato di aver raggiunto un livello di CVS-fu tale da permettermi di lavorare con i port senza troppi problemi, e per diverso tempo non ho avuto problemi, ma lâaltro ieri mi sono incasinato e ho finito col mandare una patch errata.
Si trattava ovviamente di PEBKAC in quanto avevo rimosso un file con âcvs rmâ, poi rigenerato ma non aggiunto con âcvs addâ, quindi per CVS il file era cancellato! (Succederebbe la stessa cosa con git per dire, solo che lĂŹ ho piĂš esperienza e noterei prima il problema.)
Come soluzione ho pensato di usare un poâ di piĂš CVS per prenderci la mano.
Da oggi, quindi, questo blog è gestito con CVS :D
Quello che segue è (circa) un tutorial di come ho setuppato tutto, nel caso possa tornare utile a qualcun altro.
Tutti i comandi riportati sono stati testati su unâinstallazione fresca di OpenBSD 7.0, ma dovrebbero andare bene cosĂŹ come sono o con poche modifiche su qualunque altro UNIX.
A differenza di git, CVS richiede lâesistenza di un ârepositoryâ che contiene le informazioni sui file. Questo repository poi deve essere âchecked outâ per poter modificare i file. Inoltre, essendo centralizzato, âcvs commitâ in automatico prova a scrivere le modifiche nel repository, a differenza di git dove dovremmo usare un âgit pushâ.
Creare un repository è piuttosto facile. Ho creato una cartella /cvs in un server casalingo e inizializzato il repository âblog-itâ
# groupadd wcvs # crea un gruppo âwcvsâ # usermod -G wcvs op # aggiunge lâutente op al gruppo # mkdir /cvs # chmod g+w /cvs # permetti agli utenti del gruppo wcvs # chown :wcvs /cvs # di modificare i file qui dentro # cd /cvs/blog-it # cvs -d /cvs/blog-it init
Il gruppo âwcvsâ è assolutamente arbitrario, ma può tornare utile se in futuro volessimo permettere ad altri utenti di committare. Altrimenti, possiamo fare tutto da utente locale (sconsiglio di usare root.)
CVS, cosĂŹ come RCS e Subversion, hanno questâidea di espandere le keyword. Se nei file sono presenti delle parti $Keyword: âŚ$ queste verranno espanse in qualcosâaltro. Esempi comuni sono Date, Id, Author ecc. Come esempio pratico, se scrivo $âDate$ post commit dovrebbe uscirne:
$Date: 2021/10/20 08:59:29 $
(prima ho dovuto scrivere â$âDate$â come $ zero-width-space Date $.)
Ă possibile configurare una keyword personalizzata per il repository. Ad esempio, OpenBSD usa $OpenBSD$, NetBSD e FreeBSD usano/usavano qualcosa di simile.
Lâespansione delle keyword torna piuttosto utile quando i file vengono esportati da un repository. Ad esempio, tutti i post in questo blog da adesso in poi come ultima riga avranno il numero di versione del file, quando è stato modificato e da chi. Chi visita il sito senza accesso al repo CVS potrĂ avere unâidea di quale revisione dei file stia guardando, per esempio.
Ă possibile scegliere una keyword personalizzata modificando il file CVSROOT/config del repository.
# Set this to the name of a local tag to use in addition to Id tag=BlogIt
Un repository vuoto è poco utile, per âriempirloâ bisogna effettuare un âcheckoutâ (con git diremmo âun worktreeâ) e divertirsi con CVS
$ whoami # nota: non sono piĂš root! op $ mkdir blog-it $ cd blog-it $ cvs -d /cvs/blog-it co . # âcoâ = âcheckoutâ
A questo punto ho copiato tutti i file del blog e aggiunti con âcvs addâ. Una particolaritĂ : a differenza di git, CVS traccia le directory. Per aggiungere âarticoli/foo.gmiâ, bisogna prima aver âcvs add articoliâ!
Abbastanza semplice, âcvs commitâ â o âcvs ciâ per i pigri â e le modifiche sono a posto.
CVS funziona benissimo via SSH. Basta assicurarsi di potersi collegare al server e di avere accesso in scrittura al repository, a quel punto per clonare
another-host$ cvs -d my@myserver:/cvs/blog-it co . ...
E via. Ricordo che essendo centralizzato âcvs commitâ richiede una connessione a internet in questo caso.
cvsweb è unâinterfaccia web per CVS. Almeno su OpenBSD lâinstallazione è piuttosto immediata:
# pkg_add cvsweb # sh /usr/local/share/doc/pkg-readmes/cvsweb ...
Lo script si occuperĂ di configurare correttamente la chroot /var/www. Lâunica cosa che rimane da fare è configurare httpd(8):
# /etc/httpd.conf server "cvsweb.chiaki.home" { listen on * port 80 location "/cgi-bin/*" { fastcgi root "/" } }
e abilitarlo/attivarlo se non giĂ attivo:
# rcctl enable httpd # rcctl start httpd httpd(ok)
CVS permette l'esecuzioni di comandi personalizzati in diverse situazioni. Ă possibile scrivere dei programmi per controllare â ed eventualmente anche bloccare â i commit prima che vengano applicati.
Ci sono diversi file dentro CVSROOT/*info, come commitinfo, editinfo ecc.
Al momento sto usando loginfo per sincronizzare /cvs con /var/www/cvs e con un altro server remoto. In futuro mi piacerebbe avere CVSWeb come terzo-livello di omarpolo.com, ma per oggi ho finito il tempo a disposizione per gli esperimenti.
$BlogIt: un-server-cvs.gmi,v 1.1 2021/10/20 08:59:29 op Exp $