Rainbow cat

♥ rainbow cat

goedkope energie

Cómo compilar e instalar Emacs 24.3 en Ubuntu 13.04

Emacs se ha convertido en mi editor de código favorito, aquí presento los pasos necesarios para compilarlo e instalarlo en Ubuntu a partir del código fuente (ya sabes, la versión más reciente aún no se encuentra en los repositorios oficiales). 😉

El procedimiento para hacernos con la versión más reciente de Emacs es descargar el código fuente, descomprimir el archivo, instalar las dependencias necesarias para compilarlo, compilar el código fuente e instalar.

Al momento de editar este artículo, la última versión disponible era la 24.3
Revisa cuál es la más reciente aquí.

Instalación

Abre una terminal, ingresa al directorio en donde se va a descargar el código fuente de Emacs (por ejemplo ~/tmp), luego teclea lo siguiente:

  1. wget http://ftp.gnu.org/pub/gnu/emacs/emacs-24.3.tar.gz
  2. tar -xzvf emacs-24.3.tar.gz
  3. sudo apt-get install xorg-dev libjpeg-dev libpng-dev libgif-dev libtiff-dev autoconf automake libgconf2-dev libgpm-dev libtool libdbus-1-dev libgtk2.0-dev libm17n-dev libncurses-dev libotf-dev librsvg2-dev libXpm-dev texinfo
  4. cd emacs-24.3
  5. ./configure
  6. make

Prueba si se compiló bien:

src/emacs -q

Si no hubo problemas para ejecutarlo, instálalo con:

sudo make install

Listo, para probar tu instalación teclea esto:

emacs &

Cierra la aplicación, cerrando la ventana o con la combinación Control+x+c, que usualmente se denota así:

C-x-c

Un ambiente más amigable: emacs-starter-kit

Primero debemos agregar el repositorio donde se encuentra el starter-kit:

gedit ~/.emacs.d/init.el

Y agrega estas líneas:

  1. ;; Agrega el repositorio de paquetes Marmalade para poder instalar el starter-kit
  2. (require 'package)
  3. (add-to-list 'package-archives
  4.              '("marmalade" . "http://marmalade-repo.org/packages/") t)
  5. (package-initialize)
  6.  
  7. ;; Instala automáticamente paquetes que hagan falta
  8. (when (not package-archive-contents)
  9.   (package-refresh-contents))
  10.  
  11. ;; Agrega los paquetes que desees a esta lista, en mi caso los que ocupo son estos:
  12. (defvar my-packages '(starter-kit ruby-mode ruby-end haml-mode sass-mode scss-mode coffee-mode)
  13.   "A list of packages to ensure are installed at launch.")
  14.  
  15. (dolist (p my-packages)
  16.   (when (not (package-installed-p p))
  17.     (package-install p)))

Inicia Emacs y… ¡Listo, a programar!

Configuración

Para personalizar Emacs, abre una terminal y teclea:

gedit ~/.emacs.d/$USER.el

A continuación presento el contenido del mío:

  1. ; tab width to two spaces
  2. (setq-default indent-tabs-mode nil)
  3. (setq-default tab-width 2)
  4.  
  5. ; move across buffers
  6. ; http://stackoverflow.com/questions/91071/emacs-switch-active-window
  7. (global-set-key (kbd "S-<up>") 'windmove-up)
  8. (global-set-key (kbd "S-<down>") 'windmove-down)
  9. (global-set-key (kbd "S-<right>") 'windmove-right)
  10. (global-set-key (kbd "S-<left>") 'windmove-left)
  11.  
  12. ; resize buffers
  13. ; http://www.emacswiki.org/emacs/WindowResize
  14. (global-set-key (kbd "S-C-<left>") 'shrink-window-horizontally)
  15. (global-set-key (kbd "S-C-<right>") 'enlarge-window-horizontally)
  16. (global-set-key (kbd "S-C-<down>") 'shrink-window)
  17. (global-set-key (kbd "S-C-<up>") 'enlarge-window)
  18.  
  19. ; default theme
  20. (load-theme 'wombat)
  21.  
  22. ; default global mode
  23. ; http://stackoverflow.com/questions/6378831/emacs-globally-enable-whitespace-mode
  24. (global-whitespace-mode 1)
  25. (column-number-mode 1)
  26.  
  27. ; font settings
  28. ;(set-face-attribute 'default nil :height 110)
  29. (if (eq window-system 'x)
  30.   (set-default-font "DejaVu Sans Mono-13"))
  31.  
  32. ; incrementar/decrementar el tamaño de la fuente
  33. (defun sacha/increase-font-size ()
  34.   (interactive)
  35.   (set-face-attribute 'default
  36.                       nil
  37.                       :height
  38.                       (ceiling (* 1.10
  39.                                   (face-attribute 'default :height)))))
  40. (defun sacha/decrease-font-size ()
  41.   (interactive)
  42.   (set-face-attribute 'default
  43.                       nil
  44.                       :height
  45.                       (floor (* 0.9
  46.                                   (face-attribute 'default :height)))))
  47. (global-set-key (kbd "C-+") 'sacha/increase-font-size)
  48. (global-set-key (kbd "C--") 'sacha/decrease-font-size)
  49.  
  50.  
  51. ; Agregar modo CSS para abrir así los archivos .scss
  52. (add-to-list 'auto-mode-alist '("\\.scss$" . scss-mode))
  53.  
  54. ; Agregar modo coffeescript para abrir así los archivos .coffee.erb
  55. (add-to-list 'auto-mode-alist '("\\.coffee.erb$" . coffee-mode))
  56.  
  57. ;; https://github.com/bbatsov/emacs-dev-kit/blob/master/ruby-config.el
  58. ;; Rake files are ruby, too, as are gemspecs, rackup files, and gemfiles.
  59. (add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode))
  60. (add-to-list 'auto-mode-alist '("Rakefile$" . ruby-mode))
  61. (add-to-list 'auto-mode-alist '("\\.gemspec$" . ruby-mode))
  62. (add-to-list 'auto-mode-alist '("\\.ru$" . ruby-mode))
  63. (add-to-list 'auto-mode-alist '("Gemfile$" . ruby-mode))
  64. (add-to-list 'auto-mode-alist '("Guardfile$" . ruby-mode))
  65. (add-to-list 'auto-mode-alist '("\\.rabl$" . ruby-mode))
  66.  
  67. ;; We never want to edit Rubinius bytecode
  68. (add-to-list 'completion-ignored-extensions ".rbc")
  69.  
  70. ;; Load ruby-end minor mode when ruby-mode is loaded
  71. ;; http://stackoverflow.com/questions/4767557/how-do-i-get-hs-minor-mode-to-load-automatically-on-php-mode-in-emacs
  72. (add-hook 'ruby-mode-hook (lambda () (ruby-end-mode 1)))
  73. ;(add-to-list 'load-path "/home/victor/.emacs.d")
  74. ;(require 'ruby-end)
  75.  
  76. ;transparent emacs!
  77. (defun djcb-opacity-modify (&optional dec)
  78.   "modify the transparency of the emacs frame; if DEC is t,
  79.     decrease the transparency, otherwise increase it in 5%-steps"
  80.   (let* ((alpha-or-nil (frame-parameter nil 'alpha)) ; nil before setting
  81.          (oldalpha (if alpha-or-nil alpha-or-nil 100))
  82.          (newalpha (if dec (- oldalpha 5) (+ oldalpha 5))))
  83.     (when (and (>= newalpha frame-alpha-lower-limit) (<= newalpha 100))
  84.       (modify-frame-parameters nil (list (cons 'alpha newalpha))))))
  85.  
  86. ;; C-8 will increase opacity (== decrease transparency)
  87. ;; C-9 will decrease opacity (== increase transparency
  88. ;; C-0 will returns the state to normal
  89. (global-set-key (kbd "C-8") '(lambda()(interactive)(djcb-opacity-modify)))
  90. (global-set-key (kbd "C-9") '(lambda()(interactive)(djcb-opacity-modify t)))
  91. (global-set-key (kbd "C-0") '(lambda()(interactive)
  92.                                (modify-frame-parameters nil `((alpha . 100)))))

Referencias

Installing Emacs from Source on Ubuntu
Emacs Starter Kit

Cómo instalar Ruby 2.3 con rbenv en Ubuntu 16.04

Después de haber pasado de instalar Ruby a mano, a instalarlo usando el cómodo RVM, me he ido ahora por rbenv. Otra opción, aun más ligera es chruby por si quieren echarle un ojo.

Preliminares

Vas a necesitar git, instálalo siguiendo esta guía.

Instalación de rbenv

¿Instalación local o en un VPS?

Si vas a instalar Ruby para desplegar aplicaciones en un VPS (Virtual Private Server, tipo Linode), es recomendable crear un usuario específico para ello.

Si deseas una instalación local, sáltate este paso y pasa a clonar el repositorio directamente en tu $HOME

sudo adduser deployer
#sudo usermod -a -G sudo deployer # usa esto si quieres que tu usuario para despliegue pueda usar sudo (no se recomienda)
sudo su deployer
cd ~

Clona el repositorio

git clone git://github.com/sstephenson/rbenv.git ~/.rbenv

Agrega ~/.rbenv/bin al $PATH para tener acceso al comando rbenv.

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

Agrega rbenv init a tu shell para habilitar los shims y la función de autocompletar.

echo 'eval "$(rbenv init -)"' >> ~/.bashrc

Reinicia tu shell para que los cambios surtan efecto.

exec $SHELL

Plugins para rbenv

ruby-build es un plugin que te permite instalar las diferentes versiones de Ruby de una manera sencilla y accesible.

El proyecto ruby-build te permite usar el comando rbenv install para agregar nuevas versiones de Ruby.

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

Y para no volver a escribir rbenv rehash nunca más después de instalar una gema:

git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash

Instalación de Ruby

Instala los prerequisitos (obtenidos de los que lista RVM como requisitos para Ubuntu):

sudo apt-get install bison libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf texinfo libncurses-dev automake libssl-dev build-essential libffi-dev libbz2-dev libmagickwand-dev

Para ver la lista de versiones disponibles, teclea en una terminal:

rbenv install --list

Cuando salgan nuevas versiones de Ruby, para poder instalarlas, teclea en una terminal:

cd ~/.rbenv
git pull
cd ~/.rbenv/plugins/ruby-build
git pull

Ahora, para instalar Ruby versión 2.3.0, y ponerlo como la versión por defecto, teclea en la terminal:

rbenv install 2.3.0
rbenv global 2.3.0

Con Ruby instalado y configurado, al escribir esto:

ruby -v

Debe aparecer algo como:

ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

Acelera la instalación de gemas

Para instalar las gemas más rápido, puedes desactivar la instalación de su documentación con:

echo 'gem: --no-document' >> ~/.gemrc

Actualiza las gemas iniciales

Verifica si hay actualizaciones para el administrador de paquetes gem:

gem update --system

También verifica si hay actualizaciones para las gemas que vienen instaladas por defecto:

gem update

¡Listo, ya puedes ejecutar código Ruby en tu máquina!

Instalación de Rails y Compass

Para instalar la versión estable más reciente de Rails y Compass, ejecuta:

gem install rails compass

Teclea:

rails --version

Debe aparecer algo como:

Rails 4.2.6

Recursos

Setup Ruby On Rails on Ubuntu 14.04 Trusty Tahr

Cómo descargar videos de YouTube en Ubuntu con youtube‑dl

Para instalar la última versión directa desde el repositorio en github, necesitarás instalar git.

Clona el repo de youtube-dl, compila e instala, en una terminal teclea:

git clone https://github.com/rg3/youtube-dl.git ~/development/github/youtube-dl
cd ~/development/github/youtube-dl
make all
sudo make install

Para usarlo sólo ve al directorio donde desees que se guarde el archivo, copia la URL de algún video de YouTube y ponlo delante del comando youtube-dl, de esta manera:

youtube-dl http://www.youtube.com/watch?v=I1c9KGbgxck

Espera a que finalize la descarga y listo, ¡un video más para la colección!

Cómo ver las resoluciones y formatos soportados

youtube-dl --list-formats http://www.youtube.com/watch?v=I1c9KGbgxck

Lo cual muestra:

[youtube] Setting language
[youtube] I1c9KGbgxck: Downloading video webpage
[youtube] I1c9KGbgxck: Downloading video info webpage
[youtube] I1c9KGbgxck: Extracting video information
Available formats:
37      :       mp4     [1080x1920]
46      :       webm    [1080x1920]
22      :       mp4     [720x1280]
45      :       webm    [720x1280]
35      :       flv     [480x854]
44      :       webm    [480x854]
34      :       flv     [360x640]
18      :       mp4     [360x640]
43      :       webm    [360x640]
5       :       flv     [240x400]
17      :       mp4     [144x176]

Digamos que te interesa bajar el video en formato, webm en resolución 720×1280, que viene siendo el número 45, entonces teclea en tu terminal:

youtube-dl -f 45 http://www.youtube.com/watch?v=I1c9KGbgxck
Si no se le especifica un formato, youtube-dl automáticamente descargará el archivo con la más alta calidad, es decir el que aparece hasta arriba en la lista de formatos.

¿Qué otros proveedores soporta youtube-dl?

youtube-dl --list-extractors

En la versión utilizada aquí (2012.09.27) aparecen estos:

youtube:playlist
youtube:user
youtube:search
youtube
metacafe
dailymotion
video.google
video.google:search
photobucket
video.yahoo
video.yahoo:search
DepositFiles
facebook
blip.tv:user
blip.tv
vimeo
myvideo
comedycentral
escapist
collegehumor
xvideos
soundcloud
infoq
mixcloud
stanfordoc
mtv
Youku
xnxx
generic

Cómo arreglar el infame ERROR: unable to download video

Si al tratar de descargar algún video te aparece algo como esto:

youtube-dl http://www.youtube.com/watch?v=I1c9KGbgxck
[youtube] Setting language
[youtube] I1c9KGbgxck: Downloading video webpage
[youtube] I1c9KGbgxck: Downloading video info webpage
[youtube] I1c9KGbgxck: Extracting video information
 
ERROR: unable to download video

Seguramente es porque necesitas una actualización, abre una terminal y teclea lo siguiente:

sudo youtube-dl -U

Y listo, happy downloading! 😉

Ayuda

El programa cuenta con muchas opciones, para verlas teclea:

youtube-dl -h

Cómo instalar LEMP en Ubuntu 15.10 — Linux nginx MySQL PHP

Instalación de nginx

Ligero, estable, buena arquitectura, rápido para servir contenido estático.

Aquí la guía para instalar nginx en Ubuntu:

nginx=development # usa nginx=stable para la versión estable
sudo add-apt-repository ppa:nginx/$nginx
sudo apt-get update
sudo apt-get install nginx

Al momento de escribir este artículo nginx -v reporta:

nginx version: nginx/1.7.11

Inicia el servidor

sudo service nginx start

Ahora en tu navegador ve hacia: http://localhost

Deberías ver algo como esto:

Welcome to nginx on Debian!

Siguiente, MySQL.

Instalación de MySQL

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

Prueba si todo funciona bien:

mysql -uroot -pxxx

Donde xxx es la contraseña que especificaste durante la instalación de MySQL.

Para cambiar la contraseña de la cuenta root, ejecuta el siguiente comando después de ingresar a MySQL:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yyy');

Sustituye yyy por la nueva contraseña.

Si en algún momento necesitas resetear la contraseña del root del servidor MySQL, ejecuta el siguiente comando:

sudo dpkg-reconfigure mysql-server-5.5

Puede que la versión cambie, si es así, puedes ver información sobre el paquete mysql-server con:

dpkg -s mysql-server

Mejorando la seguridad

Ejecuta el siguiente comando y contesta a todas las preguntas:

mysql_secure_installation

Listo, vamos por PHP.

Instalación de PHP

Necesito PHP para algunos sitios que utilizan WordPress y los foros de Simple Machines.

Así que, si hay que instalar PHP, hay que hacerlo con lo mejor: PHP-FPM

Sin más, dale:

sudo apt-get install php5-fpm

Establece algunos valores sanos para nginx en:

sudo nano /etc/nginx/nginx.conf

Y cambia:

keepalive_timeout 65;

Por:

keepalive_timeout 5;

Esto le indica a nginx que corte cualquier petición hecha por algún cliente que dilate más de 5 segundos.

Configura nginx para que pueda servir archivos .php, modifica:

sudo nano /etc/nginx/sites-available/default

Y asegúrate de que estas líneas se vean así:

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
        root /usr/share/nginx/html;
}
 
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
        try_files $uri =404;
        # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 
        # With php5-cgi alone:
        #fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
}
 
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /.ht {
        deny all;
}

Reinicia nginx para que los cambios en la configuración surtan efecto:

sudo service nginx restart

Lectura recomendada: Nginx Pitfalls

Mejorando la seguridad

Elimina un hueco de seguridad que se presenta en la configuración por defecto de nginx con php, sólo necesitas modificar una línea en php.ini:

sudo nano /etc/php5/fpm/php.ini

Aségurate de quitar el punto y coma del frente de la línea y cambiar el 1 por un 0, de tal manera que luzca así (el número de línea es 765 aprox):

cgi.fix_pathinfo=0

Reinicia php-fpm con:

sudo service php5-fpm restart

Comunicación por medio de un socket UNIX

Normalmente, PHP-FPM escucha en el puerto 9000 en 127.0.0.1.
Dado que php-fpm y nginx están en la misma máquina, se puede mejorar el rendimiento si se comunican a través de un socket UNIX en vez de usar TCP.
Get High Performance PHP-FPM with socket connections

Para indicarle a php-fpm que escuche en un socket UNIX en lugar de uno TCP, modifica:

sudo nano /etc/php5/fpm/pool.d/www.conf

Y asegúrate de que aparezcan las siguientes líneas (en este caso, el punto y coma se utiliza para comentar):

;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock
...
listen.owner = www-data
listen.group = www-data
listen.mode = 0666

Reinicia php-fpm con:

sudo service php5-fpm restart

Ahora, para probar que PHP está funcionando perfectamente a través de nginx, crea un archivo de ejemplo:

sudo nano /usr/share/nginx/html/info.php

Y ponle este contenido:

  1. <?php 
  2.   phpinfo();
  3. ?>

Guarda el archivo y en tu navegador ve a: http://localhost/info.php

Debes ver una página con información sobre PHP.

Instala soporte para MySQL

sudo apt-get install php5-mysql

Reinicia php-fpm:

sudo service php5-fpm restart

Instala Xcache

Xcache cachea y optimiza código intermedio PHP. En pocas palabras es bueno para tu servidor, ya que acelera la generación de tus páginas PHP.

sudo apt-get install php5-xcache

Reinicia php-fpm:

sudo service php5-fpm restart

Más extensiones para PHP

Puedes encontrar más extensiones listas para instalar con el comando:

apt-cache search php5

Ejemplos:

php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Permitir uploads de archivos grandes

A veces requieres subir archivos grandes a tu sitio, ya sea para importar algún respaldo, video, audio, etc. Desgraciadamente la configuración que trae por defecto nginx y PHP sólo permite recibir cómo máximo archivos de 1MB y 2MB respectivamente.

A continuación se muestra como incrementar este límite.

Del lado de nginx

sudo nano /etc/nginx/nginx.conf

Dentro de la sección http ingresa el client_max_body_size deseado:

http {
        ...
        client_max_body_size 8m;
...

Reinicia nginx:

sudo service nginx restart

Del lado de PHP

sudo nano /etc/php5/fpm/php.ini

Estas son las líneas que te interesan:

post_max_size = 8M
...
upload_max_filesize = 8M

Reinicia php-fpm:

sudo service php5-fpm restart

¡Listo!

Referencias

Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Ubuntu 12.04 LTS
Setting up nginx maximum upload size

Cómo instalar gitolite en Ubuntu 12.10

Gitolite te permite hospedar repositorios git en un servidor central, con un fino control de acceso y muchas (¡muchas!) características poderosas.

Gitolite — Hospeda repositorios git en un servidor Ubuntu

Si deseas habilitar un servidor como repositorio central para tus proyectos git y de esa forma facilitar la colaboración con varias personas sin necesidad de recurrir a algo como github, entonces gitolite es para ti.

Escenario

  • Servidor: donde queremos hospedar los repositorios git, aquí se va a instalar gitolite.
    El URL del servidor de ejemplo es: servidor.com
    (también puedes usar una dirección IP)
    El usuario de ejemplo con privilegios de administrador es: admin
  • Cliente: la máquina local desde donde se van a administrar los usuarios, los repositorios y los accesos.

En el cliente

En tu máquina debes tener disponible tu llave pública en ~/.ssh/id_rsa.pub, si no es así genérala con:

ssh-keygen

Ya que cuentes con la llave pública ~/.ssh/id_rsa.pub, cópiala a tu servidor, la vas necesitar para la configuración inicial de gitolite.

Para copiarla puedes usar scp. El siguiente comando copiará nuestra llave pública al $HOME de la cuenta admin en el servidor, con el nombre de admin.pub:

scp ~/.ssh/id_rsa.pub admin@servidor.com:/home/admin/admin.pub

Sustituye los datos del ejemplo por los tuyos donde sea necesario.

En el servidor

Inicia sesión en el servidor con una cuenta que pueda usar sudo (en nuestro caso particular es admin):

ssh admin@servidor.com
Si sólo tienes la cuenta de root para administrar tu servidor, te recomiendo que leas esto: Securing Your Server

Instala git usando esta guía:
Cómo compilar e instalar git en Ubuntu desde código fuente

Después crea un usuario llamado git que va a fungir como el administrador de los repositorios:

sudo adduser 
    --system 
    --shell /bin/bash 
    --gecos 'git version control' 
    --group 
    --disabled-password 
    --home /home/git 
    git
No necesita contraseña ya que no pretendemos iniciar sesión con él directamente.

Accede al usuario git y ve a su $HOME:

sudo su git
cd

Asegúrate de que ~/.ssh/authorized_keys está vacío o no existe (para el usuario git).

Copia el archivo /home/admin/admin.pub a /home/git/admin.pub:

cp /home/admin/admin.pub $HOME

Ejecuta los siguientes comandos:

git clone git://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin
echo "PATH=$HOME/bin:$PATH" > ~/.bashrc
source ~/.bashrc
gitolite setup -pk admin.pub

Listo, cierra la sesión del usuario git y después termina la del usuario admin.

Agregar usuarios y repositorios desde la máquina cliente

De regreso en tu máquina local, ahora vas a ver cómo crear repositorios y autorizar usuarios para que operen con ellos.

En gitolite, los usuarios, repositorios y reglas de acceso se administran haciendo cambios a un repositorio especial llamado gitolite-admin y surten efecto al subirlos (con un push) al servidor.

No debes agregar de forma manual en el servidor repositorios o usuarios.
Utiliza siempre el repositorio local para ese propósito.

Para administrar tu instalación de gitolite, clona el repositorio gitolite-admin a tu máquina:

git clone git@servidor.com:gitolite-admin.git
Si el comando anterior te solicita una contraseña, algo salió mal. Revisa los pasos con cuidado.

Ahora, si le das cd gitolite-admin, verás dos subdirectorios en él: conf y keydir

Para agregar a los usuarios juan, maria y pepe, obtén sus llaves públicas y mételas en keydir como juan.pub, maria.pub y pepe.pub respectivamente.

Para agregar un repositorio nuevo llamado foo y dar diferentes niveles de acceso a estos usuarios, modifica el archivo: conf/gitolite.conf, ejemplo:

repo gitolite-admin
    RW+     =   admin
 
repo foo
    RW+         =   juan
    RW          =   maria
    R           =   pepe

Después de hacer estos cambios en el cliente, hazlos efectivos en el servidor con:

git add conf
git add keydir
git commit -m 'Se creó el repositorio foo, se dio acceso a juan, maria y pepe'
git push

Cuando finalice el push, gitolite agregará los nuevos usuarios a /home/git/.ssh/authorized_keys en el servidor, así como también creará un nuevo repositorio vacío llamado foo.

Subir un repositorio existente al servidor

Para poner un repositorio local en el servidor, para que otras personas —a las que les des acceso— lo puedan clonar y trabajar, debes primero crear un espacio para él.

Esto lo haces modificando el archivo gitolite-admin/conf/gitolite.conf como se mostró arriba, haz commit de los cambios, y súbelos con push.

Después, entra al directorio del repositorio local en cuestión y teclea:

git remote rm origin
git remote add origin git@servidor.com:mi-nuevo-repositorio.git
git push origin master

Listo, ahora tu repositorio local ha sido clonado al servidor y otros usuarios pueden tener acceso a él con:

git clone git@servidor.com:mi-nuevo-repositorio.git

Más información

Para conocer más sobre las reglas de acceso y otras características de gitolite, recomiendo leer el README del proyecto y también la sección Git on the Server – Gitolite del git book.

Referencias

Setting up a gitolite server in Ubuntu