How-To get CUDA 5.5 running on Debian Jessie

Unfortunatelly, Debian is not officially supported by the nVidia's CUDA SDK. For version older than 5.0 it is not a problem, however to compile the nVidia drivers on Debian testing for a new Kepler's based nVidia card is a little tricky.

Begin from the beginning:

I have an AMD based CPU with an integrated motherboard and a Zotac video card with a nVidia GTX 650i Boost chip. This chip is based on the new nVidia's Kepler technology which supports dynamic parallelization on the GPU. My interest is to have the on board Radeon video card as main display, and the nVidia GPU for scientific computing. This post is oriented to compiling the nvidia video driver in Debian Jessie (at this point the testing release) and configuring the CUDA 5.5 SDK for parallel development.

Turn off the XServer and delete the free driver nouveau

# apt-get install mercurial mercurial-common 

El instalador de Debian, incluirá los paquetes Mercurial y Mercurial-common además de instalar el servidor de SSH . Si no tiene instalado Python el instalador también lo considerará y hará una primera configuración del sistema. Una vez que haya terminado verifique la instalación con

# hg --version

Una vez que tiene instalado mercurial-server, puede iniciar la configuración básica y trabajar directamente con los depósitos a través de SSH. La desventaja es que no tendrá una interfaz gráfica y en algunos casos eso puede ser un problema. El método que implementaremos crea un depósito (repository) de aplicaciones sobre una instalación de Apache2 funcional. Supondremos que tiene una instalación de Apache2 básica (vea instalación de Apache Web server).

Necesitará instalar el módulo libapache2-mod-wsgi mediante

# apt-get install libapache2-mod-wsgi

Recuerde que en Debian, los guiones de pre-instalación y de post-instalación le dejarán un entorno listo para continuar trabajando. Incluso, reiniciarán el servidor de Apache de manera automática.

Ahora debemos crear un servidor virtual que atienda únicamente las peticiones de mercurial a la manera de Debian. Cree el archivo mercurial dentro del directorio /etc/apache2/sites-available/ con el siguiente contenido

 <VirtualHost *:80>
    ServerName hg1.ejemplo.com
    ServerAdmin webmaster@hg1.ejemplo.com
    DocumentRoot /var/www/mercurial/htdocs
    ErrorLog /var/log/apache2/hg-error_log
    CustomLog /var/log/apache2/hg-access_log common

    WSGIScriptAliasMatch ^(.*)$ /var/www/mercurial/cgi-bin/hgwebdir.wsgi$1

    # To enable "daemon" mode, uncomment following lines. 
    # (Read mod_wsgi docs for more info)
    # WSGIDaemonProcess hg1.ejemplo.com 
    # user=USER 
    # group=GROUP 
    # threads=15 
    # maximum-requests=1000
    # some more interesting options (tested on mod_wsgi 2.0):
    # processes=2 
    # umask=0007 
    # display-name=wsgi-hg1.ejemplo.com 
    # inactivity-timeout=300
    # WSGIProcessGroup hg1.ejemplo.com

    <Directory /var/www/mercurial/htdocs>
        Options FollowSymlinks
        DirectoryIndex index.html

        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>

    <Directory /var/www/mercurial/cgi-bin>
        Options ExecCGI FollowSymlinks

        AddHandler wsgi-script .wsgi

        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

El ejemplo anterior se ha tomado del manual en línea de Mercurial para la instalación de modwsgi en Mercurial.

Ahora vaya al directorio /etc/apache2/sites-enabled y cree un enlace simbólico al archivo anterior de la forma

# cd /etc/apache2/sites-enabled
# ln -s ../sites-available/mercurial 011-mercurial

o utilice el comando

# a2ensite mercurial

(a2ensite="apache 2 enable site")

Cree los directorios donde se colocarán los proyectos y la configuración de mercurial

# mkdir -p /var/www/mercurial/htdocs
# mkdir /var/www/mercurial/cgi-bin

cree el archivo hgwebdir.config

SSL en Apache2

Instale el paquete que hará la creación de certificados qu es un wrapper para openssl

# apt-get install ssl-cert

Habilite el modulo de SSL para que funcione con apache

# a2enmod ssl

(a2enmod=apache2 enable module)

Configure openssl

# vi /etc/ssl/openssl.cnf

Si desea tener un certificado para un servidor de prueba... puede utilizar directamente el comando

# mkdir /etc/apache2/ssl
# cd /etc/apache2/ssl
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf  localcerts

La clave y el certificado se encuentran es el mismo archivo. Ahora separe en dos archivos que llamaremos site.key y site.pem y los colocamos en el mismo directorio con permisos 400 y 600 respectivamente.

# chmod 600 site.pem
# chmod 400 site.key

Creemos el archivo de contraseñas que se utilizará para acceder al depósito de mercurial

# mkdir /etc/apache2/htpasswd
# htpasswd -cm /etc/apache2/htpasswd/ht.passwd hugo

A continuación creamos el archivo del servidor virtual seguro y agregaremos la información del certificado y de la clave asignando la trayectoria completa de los archivos a las variables SSLCertificateFile y SSLCertificateKeyFile respectivamente. Cree el archivo /etc/apache2/sites-available/mercurial-ssl con el siguiente contenido

 <VirtualHost *:443>
       SSLEngine On
       SSLCertificateFile /etc/apache2/ssl/site.pem
       SSLCertificateKeyFile /etc/apache2/ssl/site.key
       # SSLCertificateChainFile /trayectoria/a/DigiCertCA.pem

       ServerName hg1.ejemplo.com
       ServerAdmin webmaster@hg1.ejemplo.com
       DocumentRoot /var/www/mercurial/htdocs/
       ErrorLog /var/log/apache2/ssl.hg-error.log
       CustomLog /var/log/apache2/ssl.hg-access.log common

       WSGIScriptAliasMatch ^(.*)$ /var/www/mercurial/cgi-bin/hgwebdir.wsgi$1

       <Directory /var/www/mercurial/htdocs>
               DirectoryIndex index.html
               AddHandler wsgi-script .wsgi
               Options ExecCGI
               Order allow,deny
               Allow from all
       </Directory>

       <Location / >
               AuthType Basic
               AuthName "Ejemplo - Mercurial Repository"
               AuthUserFile /etc/apache2/htpasswd/hg.passwd

               Require valid-user
       </Location>

</VirtualHost>

Active el sitio https://hg1.ejemplo.com que tiene configurado en el archivo mercurial-ssl y reinicie el servidor. Si todo marcha bien, tendrá su sitio Web seguro con soporte bajo SSL

# a2ensite mercurial-ssl
# /etc/init.d/apache2 restart

Para probar que su sitio Web seguro está funcionando ejecute el comando

# curl -k https://hg1.ejemplo.com

La opción -k le indica al comando curl que no haga la verificación del certificado , en caso de no utilizarla, recibirá un mensaje de error que no nos permitirá conocer el estado real de la instalación.

Ahora podrá conectarse a su sitio web seguro en la dirección https://hg1.ejemplo.com si está utilizando un navegador Web configurado de manera adecuada, recibirá un mensaje de precaución indicando que el sitio Web tiene un certificado de seguridad autorizado localmente. Si desea tener un certificado auténtico existen diversas compañías (como DigiCert ) que comercializan este tipo de certificados y usted sólo deberá ejecutar las tareas de copia y asignación de permisos en el directorio /etc/apache2/ssl, los demás pasos son equivalentes.

También puede crear un certificado de autenticidad (CA) para su propia compañía y designar sus trayectorias de autenticación internas. Le recomendamos revisar el manual de configuración y la página de preguntas frecuentes de Apache y OpenSSL directamente.