jueves, 22 de enero de 2015

"Instalar" Java: update-alternatives en Fedora 21

Si bien tengo ya una entrada sobre como configurar Java (Tomando como base una instalación de OpenSuSE), creí conveniente actualizarla un poco.

Lo recomendable es usar el RPM, tal como lo indica esta guía. Como sea, parece ser que el RPM no configura la alternativa, y lo que es más,  la instalación de OpenOffice ya había instalado la openJDK como dependencia, así que será necesario usar update-alternatives para no hacer un lío (Aunque tuve que hacer un lío para evitarlo).

Básicamente, los comandos a usar son estos:
update-alternatives --install /bin/java java /usr/java/default/bin/java 200 --slave /usr/share/man/man1/java.1.gz java.1.gz /usr/java/default/man/man1/java.1.gz \
--slave /bin/javaws javaws /usr/java/default/bin/javaws --slave /usr/share/man/man1/javaws.1.gz javaws.1.gz /usr/java/default/man/man1/javaws.1.gz \
--slave /bin/jcontrol jcontrol /usr/java/default/bin/jcontrol --slave /usr/share/man/man1/jcontrol.1.gz jcontrol.1.gz /usr/java/default/man/man1/jcontrol.1.gz \
--slave /bin/jjs jjs /usr/java/default/bin/jjs --slave /usr/share/man/man1/jjs.1.gz jjs.1.gz /usr/java/default/man/man1/jjs.1.gz \
--slave /bin/keytool keytool /usr/java/default/bin/keytool --slave /usr/share/man/man1/keytool.1.gz keytool.1.gz /usr/java/default/man/man1/keytool.1.gz \
--slave /bin/orbd orbd /usr/java/default/bin/orbd --slave /usr/share/man/man1/orbd.1.gz orbd.1.gz /usr/java/default/man/man1/orbd.1.gz \
--slave /bin/pack200 pack200 /usr/java/default/bin/pack200 --slave /usr/share/man/man1/pack200.1.gz pack200.1.gz /usr/java/default/man/man1/pack200.1.gz \
--slave /bin/policytool policytool /usr/java/default/bin/policytool --slave /usr/share/man/man1/policytool.1.gz policytool.1.gz /usr/java/default/man/man1/policytool.1.gz \
--slave /bin/rmid rmid /usr/java/default/bin/rmid --slave /usr/share/man/man1/rmid.1.gz rmid.1.gz /usr/java/default/man/man1/rmid.1.gz \
--slave /bin/rmiregistry rmiregistry /usr/java/default/bin/rmiregistry --slave /usr/share/man/man1/rmiregistry.1.gz rmiregistry.1.gz /usr/java/default/man/man1/rmiregistry.1.gz \
--slave /bin/servertool servertool /usr/java/default/bin/servertool --slave /usr/share/man/man1/servertool.1.gz servertool.1.gz /usr/java/default/man/man1/servertool.1.gz \
--slave /bin/tnameserv tnameserv /usr/java/default/bin/tnameserv --slave /usr/share/man/man1/tnameserv.1.gz tnameserv.1.gz /usr/java/default/man/man1/tnameserv.1.gz \
--slave /bin/unpack200 unpack200 /usr/java/default/bin/unpack200 --slave /usr/share/man/man1/unpack200.1.gz unpack200.1.gz /usr/java/default/man/man1/unpack200.1.gz

update-alternatives --install /usr/bin/javac javac /usr/java/default/bin/javac 200 --slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/java/default/man/man1/javac.1.gz \
--slave /usr/bin/appletviewer appletviewer /usr/java/default/bin/appletviewer --slave /usr/share/man/man1/appletviewer.1.gz appletviewer.1.gz /usr/java/default/man/man1/appletviewer.1.gz \
--slave /usr/bin/extcheck extcheck /usr/java/default/bin/extcheck --slave /usr/share/man/man1/extcheck.1.gz extcheck.1.gz /usr/java/default/man/man1/extcheck.1.gz \
--slave /usr/bin/idlj idlj /usr/java/default/bin/idlj --slave /usr/share/man/man1/idlj.1.gz idlj.1.gz /usr/java/default/man/man1/idlj.1.gz \
--slave /usr/bin/jar jar /usr/java/default/bin/jar --slave /usr/share/man/man1/jar.1.gz jar.1.gz /usr/java/default/man/man1/jar.1.gz \
--slave /usr/bin/jarsigner jarsigner /usr/java/default/bin/jarsigner --slave /usr/share/man/man1/jarsigner.1.gz jarsigner.1.gz /usr/java/default/man/man1/jarsigner.1.gz \
--slave /usr/bin/java-rmi.cgi java-rmi.cgi /usr/java/default/bin/java-rmi.cgi --slave /usr/share/man/man1/java-rmi.cgi.1.gz java-rmi.cgi.1.gz /usr/java/default/man/man1/java-rmi.cgi.1.gz \
--slave /usr/bin/javadoc javadoc /usr/java/default/bin/javadoc --slave /usr/share/man/man1/javadoc.1.gz javadoc.1.gz /usr/java/default/man/man1/javadoc.1.gz \
--slave /usr/bin/javafxpackager javafxpackager /usr/java/default/bin/javafxpackager --slave /usr/share/man/man1/javafxpackager.1.gz javafxpackager.1.gz /usr/java/default/man/man1/javafxpackager.1.gz \
--slave /usr/bin/javah javah /usr/java/default/bin/javah --slave /usr/share/man/man1/javah.1.gz javah.1.gz /usr/java/default/man/man1/javah.1.gz \
--slave /usr/bin/javap javap /usr/java/default/bin/javap --slave /usr/share/man/man1/javap.1.gz javap.1.gz /usr/java/default/man/man1/javap.1.gz \
--slave /usr/bin/javapackager javapackager /usr/java/default/bin/javapackager --slave /usr/share/man/man1/javapackager.1.gz javapackager.1.gz /usr/java/default/man/man1/javapackager.1.gz \
--slave /usr/bin/jcmd jcmd /usr/java/default/bin/jcmd --slave /usr/share/man/man1/jcmd.1.gz jcmd.1.gz /usr/java/default/man/man1/jcmd.1.gz \
--slave /usr/bin/jconsole jconsole /usr/java/default/bin/jconsole --slave /usr/share/man/man1/jconsole.1.gz jconsole.1.gz /usr/java/default/man/man1/jconsole.1.gz \
--slave /usr/bin/jdb jdb /usr/java/default/bin/jdb --slave /usr/share/man/man1/jdb.1.gz jdb.1.gz /usr/java/default/man/man1/jdb.1.gz \
--slave /usr/bin/jdeps jdeps /usr/java/default/bin/jdeps --slave /usr/share/man/man1/jdeps.1.gz jdeps.1.gz /usr/java/default/man/man1/jdeps.1.gz \
--slave /usr/bin/jhat jhat /usr/java/default/bin/jhat --slave /usr/share/man/man1/jhat.1.gz jhat.1.gz /usr/java/default/man/man1/jhat.1.gz \
--slave /usr/bin/jinfo jinfo /usr/java/default/bin/jinfo --slave /usr/share/man/man1/jinfo.1.gz jinfo.1.gz /usr/java/default/man/man1/jinfo.1.gz \
--slave /usr/bin/jmap jmap /usr/java/default/bin/jmap --slave /usr/share/man/man1/jmap.1.gz jmap.1.gz /usr/java/default/man/man1/jmap.1.gz \
--slave /usr/bin/jmc jmc /usr/java/default/bin/jmc --slave /usr/share/man/man1/jmc.1.gz jmc.1.gz /usr/java/default/man/man1/jmc.1.gz \
--slave /usr/bin/jmc.ini jmc.ini /usr/java/default/bin/jmc.ini --slave /usr/share/man/man1/jmc.ini.1.gz jmc.ini.1.gz /usr/java/default/man/man1/jmc.ini.1.gz \
--slave /usr/bin/jps jps /usr/java/default/bin/jps --slave /usr/share/man/man1/jps.1.gz jps.1.gz /usr/java/default/man/man1/jps.1.gz \
--slave /usr/bin/jrunscript jrunscript /usr/java/default/bin/jrunscript --slave /usr/share/man/man1/jrunscript.1.gz jrunscript.1.gz /usr/java/default/man/man1/jrunscript.1.gz \
--slave /usr/bin/jsadebugd jsadebugd /usr/java/default/bin/jsadebugd --slave /usr/share/man/man1/jsadebugd.1.gz jsadebugd.1.gz /usr/java/default/man/man1/jsadebugd.1.gz \
--slave /usr/bin/jstack jstack /usr/java/default/bin/jstack --slave /usr/share/man/man1/jstack.1.gz jstack.1.gz /usr/java/default/man/man1/jstack.1.gz \
--slave /usr/bin/jstat jstat /usr/java/default/bin/jstat --slave /usr/share/man/man1/jstat.1.gz jstat.1.gz /usr/java/default/man/man1/jstat.1.gz \
--slave /usr/bin/jstatd jstatd /usr/java/default/bin/jstatd --slave /usr/share/man/man1/jstatd.1.gz jstatd.1.gz /usr/java/default/man/man1/jstatd.1.gz \
--slave /usr/bin/jvisualvm jvisualvm /usr/java/default/bin/jvisualvm --slave /usr/share/man/man1/jvisualvm.1.gz jvisualvm.1.gz /usr/java/default/man/man1/jvisualvm.1.gz \
--slave /usr/bin/native2ascii native2ascii /usr/java/default/bin/native2ascii --slave /usr/share/man/man1/native2ascii.1.gz native2ascii.1.gz /usr/java/default/man/man1/native2ascii.1.gz \
--slave /usr/bin/rmic rmic /usr/java/default/bin/rmic --slave /usr/share/man/man1/rmic.1.gz rmic.1.gz /usr/java/default/man/man1/rmic.1.gz \
--slave /usr/bin/schemagen schemagen /usr/java/default/bin/schemagen --slave /usr/share/man/man1/schemagen.1.gz schemagen.1.gz /usr/java/default/man/man1/schemagen.1.gz \
--slave /usr/bin/serialver serialver /usr/java/default/bin/serialver --slave /usr/share/man/man1/serialver.1.gz serialver.1.gz /usr/java/default/man/man1/serialver.1.gz \
--slave /usr/bin/wsgen wsgen /usr/java/default/bin/wsgen --slave /usr/share/man/man1/wsgen.1.gz wsgen.1.gz /usr/java/default/man/man1/wsgen.1.gz \
--slave /usr/bin/wsimport wsimport /usr/java/default/bin/wsimport --slave /usr/share/man/man1/wsimport.1.gz wsimport.1.gz /usr/java/default/man/man1/wsimport.1.gz \
--slave /usr/bin/xjc xjc /usr/java/default/bin/xjc --slave /usr/share/man/man1/xjc.1.gz xjc.1.gz /usr/java/default/man/man1/xjc.1.gz  
Pero como el proceso fue tan educativo, vale la pena explicarlo un poco
  • Los script dentro del RPM de Java alojan su contenido en /usr/java/. Crea dos enlaces simbolicos: default y latest que apuntan hacia el directorio jdk<version>. 
  • Suponemos que cuando actualicemos con otro RPM, actualizará dichos enlaces simbólicos.
  • Dado lo anterior, apuntamos la dirección en el comando update-alternatives a /usr/java/default, para no tener que realizar todo este proceso con cada actualización de JDK
  •  Antes de empezar a configurar las alternativas, empaquetamos los manuales relacionados con los paquetes java.
for i in `find /usr/java/jdk1.8.0_31/man/man1/ -mindepth 1 -exec readlink -f {} +`; do gzip $i; done
  •  Para el primer comando update-alternatives, buscamos todo software que se relacione con java (JRE): se alojan en /usr/java/default/jre/bin/, pero los apuntaremos a /usr/java/default/bin/.
lista=""
for i in `find /usr/java/default/jre/bin/ -type f`; do lista="$lista `basename $i`"; done

for i in ${lista[*]}; do 
  if [[ $i = java ]]; then
    echo -e update-alternatives --install /usr/bin/java java  /usr/java/default/bin/java 200 --slave /usr/share/man/man1/java.1.gz java.1.gz /usr/java/default/man/man1/java.1.gz "\\"
  else
    echo -e --slave /usr/bin/$i $i /usr/java/default/bin/$i --slave /usr/share/man/man1/$i.1.gz $i.1.gz /usr/java/default/man/man1/$i.1.gz "\\"; 
  fi
done
Luego, buscamos en /usr/java/default/bin/ todo el software que no está en $lista, es decir, aquellos que no configuramos como esclavo de java, y que he querido suponer que son todas herramientas de desarrollo:
for j in `find /usr/java/default/bin/ -type f `; do
  i=`basename $j`
  if [[ $lista != *`basename $i`* ]]; then 
    if [[ `basename $i` = javac ]]; then
      echo -e update-alternatives --install /usr/bin/javac javac  /usr/java/default/bin/javac 200 --slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/java/default/man/man1/javac.1.gz "\\"
    else
      echo -e --slave /usr/bin/$i $i /usr/java/default/bin/$i --slave /usr/share/man/man1/$i.1.gz $i.1.gz /usr/java/default/man/man1/$i.1.gz "\\"; 
    fi
  fi
done
Casi terminado, basta con configurar la versión de java a usar:
update-alternatives --config java
Como no había otra alternativa para javac, se ha configurado automáticamente.

(1) Fuente
(2) Fuente
(3) Fuente

viernes, 16 de enero de 2015

Compilando xscreensaver

Para muchos "compilar" no debería ser una tarea a realizar por un administrador linux, no lo discuto: Hay razones de peso al respecto.

Pero con xscreensaver, esta vez tengo una mejor: Resulta que en CentOS 7 (Con XFCE como Entorno Gráfico), a la fecha, no he podido encontrarlo en los repositorio extra como CentOSPlus, EPEL o incluso RPMForge (El que por cierto esta desaconsejado porque ya no se actualiza).

Así, el procedimiento no ha sido un dolor de cabeza como lo han sido otros, básicamente:

Una vez obtenido el paquete desde la página más oficial posible:
wget http://www.jwz.org/xscreensaver/xscreensaver-5.32.tar.gz
(Pudiendo encontrar en http://www.jwz.org/xscreensaver/download.html la versión más reciente) Y desempacarlo en un luga apropiado:
cd /usr/local/src/
tar -xzvf xscreensaver-5.32.tar.gz
Basta con entrar al directorio
cd xscreensaver-5.32
Configurarlo, compilar e instalar
./configure --with-shadow
make
make install
En cuanto a dependencias, basta con instalar los siguientes paquetes:
yum install gcc xorg-x11-server-devel.x86_64 libXt-devel libXpm-devel motif-devel bc intltool gtk3-devel gtk2-devel libxml2-devel libglade2-devel pam-devel

Si no lo habías hecho antes, el compilador
yum install gcc
Lo que en suma pueda parecer mucho, (Y eso que no han visto el espacio usado) pero la opción es dejar de usar un salvapantallas, o tener que usar Gnome o KDE. O dejar de usar una distribución orientada a servidores como estación de trabajo.

No, parece ser que no se activa openGL, lo que de todos modos no es el fin del mundo. Pero si quieres activarlo no te olvides de revisar si tu sistema lo soporta e instalar las cabeceras:
yum install freeglut-devel.
Sólo es necesario instalar pam-devel si se usa algún módulo PAM para la autenticación de usuarios. En ese caso, configure el paquete de la siguiente forma
./configure --with-pam --with-shadow
Si no lo hace, al iniciar xscreensaver se lanzará un mensaje así:
xscreensaver: 12:19:57: couldn't get password of "alortiz"
xscreensaver: 12:19:57: locking is disabled (error getting password).
xscreensaver: 12:19:57: does xscreensaver need to be setuid?  consult the manual.
Por último, especial mención a uno de los mensajes de error que encontré mientras buscaba las dependencias del sistema:
configure: error: Your system doesn't have "bc", which has been a standard
                  part of Unix since the 1970s.  Come back when your vendor
                  has grown a clue.
El cual fácilmente arranca una sonrisa.

(1) Fuente
(2) Fuente

jueves, 4 de diciembre de 2014

Compilando la última versión del driver wanpipe en Elastix 2.5

Al seguir las instrucciones de la página oficial el siguiente error aparece:
Press [Enter] to continue...

Compiling WANPIPE LibSangoma API library ...Failed.

Press [Enter] to continue...

Compiling WANPIPE LibStelephony API library ...Failed.

El problema es que la instalación de las librerías LibSangoma API y LibStelephony API requieren del comando libtoolize que es proporcionado por el paquete libtool... O al menos eso se supone, la cuestión es que Elastix proporciona una versión más nueva de dicho paquete que no incluye ese comando

Luego, la solución consiste en instalar la versión proporcionada por CentOS. Después de instalar los paquetes para crear el entorno de desarrollo (Revise el procedimiento descrito en el link de arriba), ejecute lo siguiente:
yum remove libtool

yum install libtool.x86_64 --disablerepo=* --enablerepo='base'

Adicionalmente, cada vez que vaya a actualizar el sistema debe excluir dicho paquete del proceso con la opción -x:
yum update -x libtool

Por cierto, la gente de Elastix mantiene una campaña en indiegogo para financiar la Migración de Elastix 2.5 a CentOS 7. Supongo que las razones pueden no parecer del todo claras (De hecho, muchas cosas parecen no tener sentido en este proyecto). No obstante, no veo mala idea el colaborar.

martes, 25 de noviembre de 2014

Error con aptitude update

Ciertamente, el siguiente error es difícil de explicar.
W: Se produjo un fallo al descargar http://debian.salud.gob.sv/debian/dists/wheezy/contrib/source/Sources: 404  Not Found
W: Se produjo un fallo al descargar http://debian.salud.gob.sv/debian/dists/wheezy/non-free/source/Sources: 404  Not Found
W: Se produjo un fallo al descargar http://debian.salud.gob.sv/debian/dists/wheezy/contrib/binary-amd64/Packages: 404  Not Found
W: Se produjo un fallo al descargar http://debian.salud.gob.sv/debian/dists/wheezy/non-free/binary-amd64/Packages: 404  Not Found
E: Some index files failed to download. They have been ignored, or old ones used instead.
E: No se pudo reconstruir el almacén de paquetes

Resulta que los servidores del trabajo estaban respondían de esta forma a un aptitude update, aún cuando los equipos que uso para laboratorio usaban la misma configuración en el archivo sources.lst.

Supongo que debe existir una mejor solución: Sin embargo, lo que me funcionó fue eliminar del ficheros aquellos ramas que daban problemas. Más o menos de esta forma
#deb http://debian.salud.gob.sv/debian/ wheezy main contrib non-free
#deb http://debian.salud.gob.sv/debian/ wheezy main contrib non-free

deb-src http://debian.salud.gob.sv/debian/ wheezy main
deb-src http://debian.salud.gob.sv/debian/ wheezy main

deb http://debian.salud.gob.sv/debian/ wheezy-updates main contrib non-free
deb-src http://debian.salud.gob.sv/debian/ wheezy-updates main contrib non-free

deb http://debian.salud.gob.sv/debian-security/ wheezy/updates main contrib non-free
deb-src http://debian.salud.gob.sv/debian-security/ wheezy/updates main contrib non-free
Luego, actualizo la lista de paquetes sin problemas
aptitude update
Vuelvo a activar las ramas problemáticas

deb http://debian.salud.gob.sv/debian/ wheezy main contrib non-free
deb http://debian.salud.gob.sv/debian/ wheezy main contrib non-free

deb http://debian.salud.gob.sv/debian/ wheezy-updates main contrib non-free
deb-src http://debian.salud.gob.sv/debian/ wheezy-updates main contrib non-free

deb http://debian.salud.gob.sv/debian-security/ wheezy/updates main contrib non-free
deb-src http://debian.salud.gob.sv/debian-security/ wheezy/updates main contrib non-free
Y esta vez la actualización sucede sin problemas:
aptitude update

Un de las tantas cosas que evidencian el final feliz a este problema es que el comando avisa que hay nuevos paquetes disponibles. (El tanto el pensaba que ya no existían porque había creado su lista de paquetes disponibles sin las ramas problemáticas)
Estado actual: 50 actualizados [+13], 36480 nuevos [+35024].

domingo, 12 de octubre de 2014

'nomodeset' y gráficos Intel

Los dispositivos Intel son sin duda de los más soportados en Linux.
Hace años, comprar una motherboard Intel me cambio la vida en cuanto a la experiencia con gráficos.

Sin embargo un pequeño inconveniente aparece con las versiones más recientes del kernel linux: Tomo como referencia el 3.11-6 que trae OpenSuSE 13.1 y el que trae Fedora 20, 3.11.10.
En openSuse es posible que el vídeo no se muestre correctamente. Tal como si no se hubiera instalado el driver correctamente. En Fedora, es la resolución de pantalla que no se muestra correctamente, y no es posible cambiar entre todas las resoluciones que sabemos están soportadas. Estos problemas se deben a nomodeset
nomodeset
The newest kernels have moved the video mode setting into the kernel. So all the programming of the hardware specific clock rates and registers on the video card happen in the kernel rather than in the X driver when the X server starts.. This makes it possible to have high resolution nice looking splash (boot) screens and flicker free transitions from boot splash to login screen. Unfortunately, on some cards this doesnt work properly and you end up with a black screen. Adding the nomodeset parameter instructs the kernel to not load video drivers and use BIOS modes instead until X is loaded.
La solución no podría ser más sencilla: Removemos nomodeset. En el fichero /etc/default/grub buscamos en la línea GRUB_CMDLINE_LINUX la opción nomodeset y la borramos.

Ahora, actualizamos propiamente la configuracion del kernel con algo tan simple como ejecutar desde consola:
grub2-mkconfig

La ventaja de modificar indirectamente /boot/grub2/grub.cfg de esta forma es que la configuración no ha de perderse con actualizaciones del Kernel u otras modificaciones que hagamos.

Por otra parte, hay que tener en cuenta que este arreglo sólo funciona para los problemas descritos (Y quizá algunos más) pero exclusivamente para gráficos Intel.

Fuente

viernes, 21 de febrero de 2014

El eterno problema en samba: nofile = 1024

Al hacer una configuración de samba en Debian Wheezy (Y parece que en la mayoría de distribuciones linux), un mensaje de error aparece al configurar samba y comprobando el archivo de configuración con testparm:
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Este mensaje viene a decir que el número máximo de archivos que un usuario puede abrir esta configurado a 1024 en el sistema. Esta es parte de toda una serie de límites que se configuran en el sistema para evitar que un usuarios acapare todos los recursos del sistema.

La solución pareciera estar documentada en muchas partes, sin embargo a mi no me ha funcionado. Según la mayoría, basta con agregar lo siguiente en el archivo /etc/security/limits.conf, al menos antes de la última línea
(...Contenido suprimido...)
#@student        -       maxlogins       4
*                -       nofile          16384
# End of file
Pero mi Debian no responde a tal configuración. Y sin embargo lo hace cuando se configura al vuelo con ulimit -n 16384. Por tanto, supe que era posible.

Para que en realidad funcione, basta con especificar el usuario sobre el que se realiza este configuración en lugar del comodín * Así queda
(...Contenido suprimido...)
#@student        -       maxlogins       4
root             -       nofile          16384
# End of file

Tiene sentido al final de cuentas. Con el comodín, el límite máximo sería alcanzable para todo el que se loguea en el sistema (Sobre todo en mi caso que lo uso como PDC...). En este caso, sólo cambiamos el límite para root, que es quién maneja los procesos de Samba.

Actualización:
Por si las dudas (Se supone que hemos arreglado el problema, pero el mensaje de error continúa apareciendo cuando se ejecuta testparm desde una sesión root obtenida con su -), agregue en /etc/pam.d/sudo lo siguiente,
(...Contenido suprimido...)
session    required   pam_limits.so
Reinicie el sistema y todo estará bien.

jueves, 20 de febrero de 2014

DVD de CentOS como repositorio

Cuando se instala un cliente paravirtualizado en xen, su naturaleza impide usar algunos componentes de hardware, entre los que se incluyen las lectoras DVD. Lo usual es que se use una instalación en red para la mayoría de casos.

Para instalar CentOS, tenemos la opción usar un repositorio externo, lo que que no parece una opción saludable ni cuerda. Sin embargo, posible usar el DVD que de todos los días como repositorio local de un forma bastante simple.

Instalamos apache
zypper install -t pattern lamp_server
Permitimos el listado de ficheros para este directorio con la opción Indexes
vim /etc/apache2/default-server.conf
A modo de ejemplo, y con contenido recortado
DocumentRoot "/srv/www/htdocs"

#
# Configure the DocumentRoot
#
<Directory "/srv/www/htdocs">
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs-2.2/mod/core.html#options
        # for more information.
Options Indexes
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
AllowOverride None
        # Controls who can get stuff from this server.
Order allow,deny
 Allow from all
</Directory>
Iniciamos el servicio
systemctl status apache2.service
Creamos un directorio dentro del cual crearemos el repositorio
mkdir /srv/www/htdocs/centos
Lo montamos
mount -o loop /home/usuario/CentOS-6.5-x86_64-bin-DVD1.iso /srv/www/htdocs/centos/
Y nada, que ya lo podemos especificar como --location dentro del comando virt-install. La URL queda http://<ip-servidor>/centos

DVD de CentOS como respositorio
Creo que en cuanto pueda, revisaré con cuales otras distribuciones es posible hacer esto.

Otros apuntes interesantes

Otros apuntes interesantes