Implementar un cyber cafe con GNU/Linux y Software Libre

Imagen de RazaMetaL

Este pequeno manual indica como administrar un cyber cafe usando software libre en la distribucion Debian Etch y varios terminales de bajos recursos.

[b]Que es lo que planeamos hacer?[/b]
Controlar el consumo monetario de Internet en las terminales, una maquina con mejores caracteristicas de hardware la usaremos como servidor grafico para las terminales, ademas esta maquina va a correr CUPS para poder imprimir, asterisk para hacer llamadas internacionales y a2billing para administrar la facturacion del gasto telefonico y ccl para administrar las pcs.

Para implementar un cybercafe requerimos de:

1 servidor
n terminames
n dispositivos VoIP

En mi caso mi servidor es:

Procesador : Pentium IV 2.8Ghz
RAM : 1GB
Disco Duro : 40GB

Y tengo varios terminales de las siguientes caracteristicas:

Procesador Pentium I 133Mhz
Disco duro 2GB
1 Interfaz de Red
RAM 32MB


Procesador Pentium III 733Mhz
Disco duro 10GB
1 Interfaz de Red
RAM 128MB

Para hacer VoIP usaremos cualquier dispositivo que soporte SIP o IAX2 y que se pueda registrar con Asterisk.

Sofware a Utilizar:

Debian GNU/Linux
TCOS
ccl
asterisk
a2billing
cups
gnome

[b]Instalacion de TCOS.[/b]
Vamos a instalar TCOS para administrar eficientemente y sin dificultad los terminales, TCOS es un proyecto libre que crea un micro sistema operativo para ser cargado por NFS/PXE en las terminales. Para su implementacion exitosa debemos tomar en cuenta varios detalles como por ejemplo los terminales deben tener de 24 a 32MB de RAM para poder botear via NFS y minimo 64MB para botear usando PXE.

TCOS permite a mis terminales de bajo performance botear por red y descargar una imagen del kernel via NFS, a las terminales que tiene mas de 64MB les va a permitir usar PXE. Una ventaja de usar NFS es que puedes usar terminales bastante viejos, pero una desventaja es que agregan carga a la red.

Características de TCOS

* Arrancar en modo PXE (necesita al menos 64 MB de RAM)
* Arrancar por medio de NFS (necesita entre 28 y 32 MB de RAM)
* Sonido en red en aplicaciones como JClic o Firefox.
* Splash de arranque (al estilo ubuntu)
* Auto configuración de las X (discover y configurexorg)
* Soporte para tarjetas de sonido ISA o PCI
* Varios servidores de sonido (ESound o PulseAudio) sobre ALSA
* Autenticación con las cookies de X-window o usuario y contraseña (shadow).
* Soporte para aplicaciones locales (navegadores links2, dillo, FreeNX ...)
* Posibilidad de instalar Debian o Ubuntu en terminales (debootstrap, install-system.sh)
* Monitor de equipos y realización de varias acciones (TcosMonitor)
* Asistente gráfico (opcional) para la construcción de las imágenes de arranque (TcosConfig)
* Uso de dispositivos remotos de manera sencilla (USB, cdrom y disquetes) (TcosDevices)
* Control remoto de los niveles de audio de la tarjeta de sonido (TcosVolumeManager)
* Personalización de algunos valores para cada equipo (TcosPersonalize)
* Ahorro de energía. Gracias a una pequeña aplicación es posible reiniciar, apagar o mandar un aviso en cualquier momento y de manera desatendida, muy útil por ejemplo para ponerlo como tarea programada cron

Para instalar TCOS agregamos el repositorio de TCOS en /etc/apt/sources.list, pero antes debemos descargar la llave publica para estos paquetes:


wget http://cls-tcos.forja.rediris.es/repos/mariodebian-pub.key
apt-key add mariodebian-pub.key

Agregamos en /etc/apt/sources.list :

# tcos debian unstable/testing repos
deb http://cls-tcos.forja.rediris.es/repos unstable main
deb-src http://cls-tcos.forja.rediris.es/repos unstable main

Ejecutamos :

aptitude update
aptitude install tcos dhcp3-server atftpd syslinux xfs build-essential module-assistant linux-header-`uname -r` squashfs-source unionfs-source unionfs-tools unionfs-utils aumix

Instalamos unionfs:

m-a a-i unionfs squashfs

Adicionalmente es recomendable instalar los siguientes paquetes:

aptitude install dhcp3-client console-data iftop strace twm xterm grub openbsd-inetd debootstrap libltdl3 x11vnc dropbear alsa-base alsa-utils ltspfs-client ltspfs-server pulseaudio tcosconfig tcos-usplash

Configuramos el servidor DHCP, necesitamos editar /etc/default/dhcp3-server e indicar en que interfaz de red debe escuchar por peticiones DHCP, en este caso es la interfaz eth1:

# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"

El servidor se puede configurar de dos maneras, para que asigne ips a los equipos conforme se vayan solicitando o configurando la MAC de cada tarjeta de red del Cliente. En este caso de ejemplo requerimos que cada terminal tenga siempre la misma direccion IP, esto para poder luego usar el software de control y facturacion de las terminales con IPs fijas y no dinamicas.

El archivo deberia quedar asi, asumimos que la red del cyber es 192.168.1.0/24 :

#/etc/dhcp3/dhcpd.conf
## Sample configuration file for ISCD dhcpd
##
## Don't forget to set run_dhcpd=1 in /etc/init.d/dhcpd
## once you adjusted this file and copied it to /etc/dhcpd.conf.
##
#
default-lease-time 21600;
max-lease-time 21600;

option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.254;
option domain-name "razametal.homelinux.org";
option root-path "192.168.1.254:/opt/ltsp/i386";
next-server 192.168.1.254;

shared-network TERMINALES {
subnet 192.168.1.0 netmask 255.255.255.0 {
}
}

group {
use-host-decl-names on;
option log-servers 192.168.1.254;
next-server 192.168.1.154;

host terminal01 {
# Computador No 1
hardware ethernet 00:02:A5:28:1F:76;
fixed-address 192.168.1.1;
filename "pxelinux.0";
option vendor-encapsulated-options 09:0f:80:00:0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:0a:07:00:50:72:6f:6d:70:74:06:01:02:08:03:80:00:00:47:04:80:00:00:00:ff;
}

host terminal02 {
# Computador No 2
hardware ethernet 00:02:A5:55:83:2A;
fixed-address 192.168.1.2;
filename "pxelinux.0";
option vendor-encapsulated-options 09:0f:80:00:0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:0a:07:00:50:72:6f:6d:70:74:06:01:02:08:03:80:00:00:47:04:80:00:00:00:ff;
}

host terminal03 {
# Computador No 3
hardware ethernet 00:02:a5:33:f2:ef;
fixed-address 192.168.1.3;
filename "pxelinux.0";
option vendor-encapsulated-options 09:0f:80:00:0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:0a:07:00:50:72:6f:6d:70:74:06:01:02:08:03:80:00:00:47:04:80:00:00:00:ff;
}
}

Agregamos en /etc/hosts :

# Para TCOS
192.168.1.1 terminal01
192.168.1.2 terminal02
192.168.1.3 terminal03
192.168.1.254 servidor

Construimos las imagenes de arranque:

m-a a-i squashfs
gentcos -tftp -nbi -nfs -rootfs -allmodules

Revisamos el archivo /var/lib/tcos/tftp/pxelinux.cfg/default el mismo que debe lucir mas o menos asi (tengo kernel 2.6.18-4-686:

## Generated file don't edit, edit /etc/tcos/pxelinux.cfg.tpl instead
## File generated by gentcos on Fri Mar 16 11:52:09 EDT 2007
default tcos
prompt 1
timeout 200
display tcos.msg
F0 tcos.msg
F1 help.msg

label tcos
kernel vmlinuz-2.6.18-4-686
append ramdisk_size=65536 initrd=initramfs-2.6.18-4-686 root=/dev/ram0 boot=tcos quiet splash

label update
kernel vmlinuz-2.6.18-4-686
append ramdisk_size=65536 initrd=initramfs-2.6.18-4-686 root=/dev/ram0 boot=tcos quiet splash installer-update

label nfs
kernel vmlinuz-2.6.18-4-686
append ramdisk_size=32768 initrd=initramfs-2.6.18-4-686-nfs root=/dev/ram0 boot=tcos quiet splash

# other examples
#label tcos-low
# kernel vmlinuz-2.6.18-4-686
# append ramdisk_size=65536 initrd=initramfs-2.6.18-4-686 root=/dev/ram0 boot=tcos quiet discover=0 noautofs noltspfs nosound
#
#label tcos-new-pc
# kernel vmlinuz-2.6.18-4-686
# append ramdisk_size=65536 initrd=initramfs-2.6.18-4-686 root=/dev/ram0 boot=tcos quiet showmodules discover=1

Configuramos el servidor NFS para asistir a terminales de bajos recursos. Como indicaba en unos parrafos al inicio se usa NFS para equipos que tienen de 28 a 32MB de RAM.


aptitude install nfs-kernel-server

Agregamos en /etc/exports :

# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync) hostname2(ro,sync)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt)
# /srv/nfs4/homes gss/krb5i(rw,sync)
#
/var/lib/tcos/tftp 192.168.0.0/255.255.255.0(ro,sync,no_root_squash,no_subtree_check)

Ejecutamos:

exportfs -ra

Generamos la imagen:

gentcos -nfs -rootfs

Para que los terminales arranquen por nfs debemos escribir nfs cuando aparezca boot:

boot: nfs

Debemos configurar servidor de fuentes comentando la linea no-listen en /etc/X11/fs/config :

# turn off TCP port listening (Unix domain connections are still permitted)
#no-listen = tcp

Configuramos gdm:

gdmsetup

Seleccionamos la opcion REMOTE, luego cambiamos la opcion REMOTE LOGON DISABLED a PLAIN. Finalmente cerramos gdmsetup.

Ahora arrancamos las terminales y configuramos el bios para que utilizen la red para hacer boot, veremos una pantalla de TCOS y luego nuestro terminal arrancara, podemos configurar desde el servidor que los terminales hagan autologin en gdm con:


tcos-gdm-autologin --configure

Agregamos los usuarios con:

tcos-gdm-autologin --add

Este comando nos mostrara una salida mas o menos asi, he ilustrado el ejemplo agregando tres terminales:

# tcos-gdm-autologin --configure
# tcos-gdm-autologin --add
Please input the common prefix of hosts/users (example host): terminal0
Need network IP Address of thin clients (example 192.168.0): 192.168.1
Number of host/users to generate (number): 3
Start generating from (default 1): 1

I will generate users and hostnames from "terminal01" to "terminal03"
with ip adresses from 192.168.1.1 to 192.168.1.3
and uncompress "/root/skel.tar.gz" as HOME_TEMPLATE

Are you sure you want this? [y/n] y
Adding user: terminal01
useradd: el usuario terminal01 existe
Adding user `terminal01' to group `fuse' ...
Hecho.
IP 192.168.1.1 is in /etc/hosts
Adding user: terminal02
useradd: el usuario terminal02 existe
Adding user `terminal02' to group `fuse' ...
Hecho.
IP 192.168.1.2 is in /etc/hosts
Adding user: terminal03
useradd: el usuario terminal03 existe
Adding user `terminal03' to group `fuse' ...
Hecho.
IP 192.168.1.3 is in /etc/hosts
done.

Si incrementamos terminales podemos realizar el mismo procedimiento las veces que sea necesario.

[b]Instalar CCL:[/b]
CCL es un administrador de Cyber Cafe bastante vistoso. Su instalacion es sencilla al igual que su configuracion.

Para instalarlo necesitamos tener las siguientes dependencias instaladas:

aptitude install libsqlite3-dev libfox-1.6-dev libxml-parser-perl

Vamos primero a instalar la porcion del programa que actua como servidor en nuestro servidor:

wget http://ccl.sourceforge.net/tmp/cclfox-0.7.1-FOX-1.6.tar.bz2
wget http://ccl.sourceforge.net/tmp/libccls-0.7.1.tar.bz2

Instalamos:

cd /usr/src
tar jvxf libccls-0.7.1.tar.bz2
cd libcclc-0.7.1
./configure
make
make install

cd /usr/src
tar jvxf cclfox-0.7.1-FOX-1.6.tar.bz2
cd cclfox-0.7.1
./configure
make
make install

Ejecutamos el servidor con el comando:

cclfox

Si pide certificados ssl debemos hacer lo siguiente:

wget http://ccl.sourceforge.net/tmp/CA.pem -O /home/usuario/.ccl/CA.pem
wget http://ccl.sourceforge.net/tmp/cert.pem -O /home/usuario/.ccl/cert.pem
cclfox

Para instalar el cliente demos hacer lo siguiente:

cd /usr/src
wget http://ccl.sourceforge.net/tmp/libcclc-0.7.1.tar.bz2
wget http://ccl.sourceforge.net/tmp/cclcfox-0.7.1-FOX-1.6.tar.bz2

tar jvxf libcclc-0.7.1.tar.bz2
cd libcclc-0.7.1
./configure -nossl
make
make install

tar jvxf cclcfox-0.7.1-FOX-1.6.tar.bz2
./configure -nossl
make
make install

Ejecutamos el cliente con el comando:

cclcfox

Tambien hay un cliente win32 que se puede utilizar en terminales con el sistema operativo Windows:
[url]http://ccl.sourceforge.net/tmp/client_win32.rar[/url]

El paso siguiente es configurar en el servidor las tarifas por el uso de los terminales. En cada terminal se debe ejecutar al inicio

[b]Instalamos Asterisk:[/b]
En este [url=http://www.ecualug.org/?q=2007/01/14/comos/instalar_asterisk_y_freepbx_2_2_0_en_debian]link[/url] estan los detalles.

Con Asterisk podremos brindar el servicio de llamadas internacionales a bajo costo usando VoIP.

[b]Instalamos A2billing:[/b]
En este [url=http://www.ecualug.org/?q=2006/07/19/comos/instalar_un_sistema_de_facturacion_para_asterisk]link[/url] estan los detalles.

Con a2billing facturaremos el consumo telefonico del Cyber.

Para terminar con la implementacion configuramos los dispositivos de VoIP para que se registren con asterisk.

Ahora estamos listos para abrir el cyber al publico :)

Comentarios

Felicidades Raza, estuve

Imagen de Tonny

Felicidades Raza, estuve leyendo en las listas de LTPS y TCOs y veia tus inquietudes, me da mucha alegria de que lo que tu sufriste configurando algunas cosas en TCOS, nos las hayas facilitado,
gracias por tu colaboracion
yo tambien queria implementar clientes ligeros con LTPS, pero ahora lo voy a intentar con el proyecto de mario

Imaginense cuanto se

Imagen de RazaMetaL

Imaginense cuanto se ahorraria en un centro de conputo para escuelas. TCOS tiene TcosMonitor que es un manejador de aula virtual, hay una opcion interesante llamada "demo" que puede ejecutarse por ejemplo en el terminal del instructor, lo que el hace es mostrado en todos los terminales asi los alunmos permanecen sentados todo el tiempo :)

Con NFS puedes usar terminales con un minimo de 28MB de RAM, para usar PXE requieres 64MB.

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

Si. Con PXE requires de 64MB

Imagen de RazaMetaL

Si. Con PXE requires de 64MB y si usas NFS de 28 a 32MB.

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

reiniciar el /home del usuario al terminar la session CCL ?

Hola Raza,

Gracias por compartir tu experiencia en el tema de cyber con linux.
Tambien estoy intentando montar un proyecto similar (salvo usando LTSP en vez de TCOS).

Ya me funcciona el protótipo y me estoy preguntando de como podria asegurar la confidencialidad de los usuarios. Lo mejor seria de poder lanzar un script que reinicie al carpeta home del usuario de la terminal cuando se termine la sesion CCL.

Mi pregunta es : tienen idea de como lo podria lograr ? Hasta ahora no he conseguido encontrar ninguna informacion al respeto.

Y si no de esta manera, os occure otra que me permita asegurarme de la confidencialidad de la sesion del usuario ?

Muchas gracias por todo,
To-De

Si usas GDM puedes dar un

Imagen de RazaMetaL

Si usas GDM puedes dar un usuario y contrasena a cada usuario. No comprendo para que quieres usar CCL si el usuario tiene que ingresar con user y contrasena desde GDM. CCL corre en el userspace, es decir que tienes que tener un sesion inciada para que funcione.

------------

Antes de preguntar visita el [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

 

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

-----

Visita este [url=http://www.sindominio.net/ayuda/preguntas-inteligentes.html]link[/url] :evil:

[img]http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/debian.jpg[/img]

Pudieras hacer un script que

Imagen de antares

Pudieras hacer un script que haga más o menos lo siguiente:

- borrar el directorio /home/usuario
- crear el directorio /home/usuario
- copiar /etc/skel/* a /home/usuario/
- cambiar el dueño de /home/usuario a usuario:grupo

Con eso estás trabajando con un home nuevo, recién creadito, así te aseguras que la persona que se siente no tenga acceso a lo que estuvo trabajando el anterior usuario.

Saludos.

Saludos,

antares

AYUDA CON CCL RAPIDO SIIII?????

Quiero implementar un cyber con CCl (Cafe con Leche); sin embargo no puedo instalarlo sigo los pasos del manual de Razametal "Implementar un cyber cafe con GNU/Linux y Software Libre" y nada cuando le doy el "./configure" dentro del libccls me dice que hace falta un paquete "sqlite3" lo instalo con "aptitude install sqlite3" pero me dice que no existe en su lugar encuentra "libsqlite3-0" lo instalo, pero cuando ejecuto denuevo el ./configure me sigue diciendo lo mismo

QUE HAGO ES UN PROYECTO Y AUN NO LO TERMINO

Llego tarde a responderte, me temo

Siempre que quieras hacer un "configure", con algún software que lo necesite, necesitas los paquetes "dev" del mismo.

Yo estoy con Kubuntu, no sé en que distribución estés. En Kubuntu, por lo que veo (aviso también que estoy en la versión 64bits) sería algo así como "apt-get install libsqlite3-dev". De otro modo, tendrás librerías para utilizar, pero no para compilar.

Espero que te ayude a ti o al que venga con las mismas dudas.

Un saludo.

Páginas