Ikiwiki y git
La disposición recomendada para usar IkiWiki y Git consiste en crear un repositorio raíz desnudo (sin árbol de archivos) y varios clones de trabajo (que sí tienen árbol de directorios) como nodos finales, desde los que se harán cargas (push) y descargas (pull) de datos contra el raíz.
Uno de éstos nodos clon es especial, ya que se usa para compilar el wiki y
guardar los cambios (vía commit) que se hacen a través del interfaz web
(complemento cgi). Este repositorio tendrá un
directorio de trabajo y será al que apuntemos con la variable de configuración
de IkiWiki srcdir
.
Como normal general los cambios se deben enviar (git push
) al repositorio
raíz y no a ninguno de los clones.
Como práctica recomendada tendremos entonces que crear tres repositorios, que vamos a describir en subsecciones individuales.
Repositorio raíz
Es el que debería tener lo mínimo imprescindible (bare repository), es
decir, sin árbol de carpetas donde trabajar, y el que emplearán los otros
repositorios para cargar y descargar datos. Es a él al que se refiere la
documentación de ikiwiki-makerepo
como repository.
Además contiene un programa de post-actualización (post update hook) que efectúa las tareas de compilación del wiki de la siguiente forma:
- Cambia al directorio de trabajo del wiki (
srcdir
), - actualiza el repositorio (
git pull
) - y refresca el contenido (
ikiwiki refresh
) para crear las correspondientes páginas HTML.
Una forma de crear un repositorio de este tipo es como sigue:
$ cd /var/lib/git/
$ mkdir mywiki && cd mywiki
$ git-init --bare
Initialized empty Git repository in /var/lib/git/mywiki
$
Repositorio de compilación
Este repositorio es un clón del raíz y se emplea como lugar de trabajo para
compilar el wiki y obtener las páginas HTML correspondientes, así como para
mantener los cambios si se emplea el interfaz CGI, por lo que podemos deducir
que deberá tener los permisos de acceso necesarios para que éste componente
funcione (en Debian generalmente es el usuario www-data
el que debe
tener acceso).
La configuración de IkiWiki lo referencia como srcdir
y para crearlo se
puede emplear lo siguiente:
$ cd /var/lib/git
$ git clone -l -n mywiki mywiki-working
Initialized empty Git repository in /var/lib/mywiki-working
$
Repositorio de actualización
El tercer, cuarto y/ó quinto repositorio (tantos como se desee) son también
copias clon de repositorio raíz y tienen un directorio de trabajo donde se
efectuarán los cambios que no procedan del complemento cgi
. Se consideran
repositorios de trabajo diario y serán desde los que terminen enviando los
cambios al repositorio raíz; allí el programa de post-actualización se pondrá
en marcha y actualizará la copia de trabajo local y construirá e instalará las
páginas web resultantes.
Es primordial que nunca se envíen los cambios a un repositorio con directorio de trabajo, es decir, que no se efectúen operaciones push contra el directorio de compilación ó cualquiera de los de actualización. Siempre se debe emplear para esto el repositorio raíz.
Archivo ikiwiki.setup
Así pues tendremos una máquina donde residen los repositorios raíz y de compilación, y varias máquinas más (en casa, en el trabajo, portátil ... ) donde estarán copias del raíz y que se emplearán para mantener el wiki. Dada esta disposición de repositorios el archivo de configuración 'ikiwiki.setup' necesita algunos retoques concretos, sobre todo en la parte de localización de repositorios.
use IkiWiki::Setup::Standard {
wikiname => 'MyWiki',
adminemail => 'root@mywiki.com',
# subdirectorio de fuentes dentro del repositorio
# de compilación
srcdir => '/var/lib/git/mywiki-working/src',
# directorio final, en este caso la raíz del servidor web local
destdir => '/var/www',
# URL base desde el que crear el resto
url => 'http://mymachine',
# subdirectorio donde encontrar las plantillas
templatedir => "/var/lib/git/mywiki-working/templates/",
# subdirectorio donde encontrar los archivos básicos de un wiki
underlaydir => "/var/lib/git/mywiki-working/base/",
rcs => 'git',
...
Y no nos olvidamos de añadir la configuración de los programas auxiliares:
wrappers => [
...
{
# el programa activado tras una recepción de datos en el
# repositorio
wrapper => "/var/lib/mywiki/hooks/post-update",
wrappermode => 04755,
notify => 1,
...
},
...
},
En este caso fijándonos bien en que el wiki es el raíz y no el de compilación.
Pasos a seguir para actuar sobre un wiki
Obtener una copia del repositorio raíz, asumiendo que estamos en otra máquina y que existe un servidor git al que podemos acceder.
$ mkdir git $ git clone git://mymachine/pub/mywiki git/mywiki
Efectuar las modificaciones tales como añadir archivos (
git add
), borrarlos (git rm
) ó alterar su contenido, y registrar los cambios regularmente congit commit -a
.Enviar los cambios al servidor:
$ git push
Disfrutar del resultado :-)
Operaciones muy concretas
Crear un repositorio desnudo (bare repository)
Asumiendo que un repositorio desnudo es aquél que no tiene directorio de trabajo se pueden dar los dos casos:
Tenemos un repositorio con directorio de trabajo y queremos convertirlo en uno desnudo:
$ git clone --bare -l <ruta_al_repositorio> <ruta_al_nuevo_repositorio>
y luego basta con renombrar el antiguo con otro nombre como copia de seguridad (aunque también se puede borrar sin más), y cambiar el nombre del nuevo repositorio al antiguo. Todo esto para que las copias de trabajo del repositorio no tengan que actualizarse con nuevos parámetros.
Por cierto, el parámetro
-l
degit-clone
se debe emplear cuando se trata de repositorios locales, ya que se salta el proceso de transporte habitual en estos casos y realiza enlaces duros de los archivos en lugar de copiarlos.Queremos crear un repositorio desnudo desde el principio:
$ mkdir my_new_repo $ cd my_new_repo $ git-init --bare Initialized empty Git repository in ... my_new_repo/