Usando Linux para muchas cosas y disfrutando de videojuegos, en dispositivos moviles, consolas y pc. Using Linux for many things and enjoying video games, mobile devices, consoles and pc

Crea tu servidor web con una Raspberry Pi

Para tener tu propio servidor web ya no es necesario contar con un super equipo; basta con tener una board Raspberry Pi. Aun asi aclaro que sus prestaciones no serán las mismas pero para motivos de investigación, un proyecto casero/oficina, funcionara perfecto. Para este articulo supondré que ya estas familiarizado con la Raspberry Pi y tienes instalado Raspbian (versión linux debian para esta board). No lo tienes aun? En este articulo te enseño a instalar NOOBS el cual lo trae incluido. 



-Actualizamos nuestro Raspbian
sudo apt-get update
sudo apt-get dist-upgrade

-Instalamos requerimientos
sudo apt-get install php5-fpm libgd2-xpm libpcrecpp0 libxpm4 nginx fcgiwrap

-Creamos un directorio para nuestros proyectos web
sudo mkdir /var/www

-Creamos index.php para verificar módulos cargados
sudo vi /var/www/index.php
<?php
 phpinfo();
?>

-Modificamos sus permisos para que lo pueda leer nginx
sudo chown -R www-data:www-data /var/www

-Modificamos la configuración de nginx
sudo vi /etc/nginx/sites-available/default
server {
        root /var/www;
        index index.php index.html index.htm;

        location ~ .php$ {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        }

-Reiniciamos el servicio de nginx
sudo service nginx restart

-Navegamos con un browser a la dirección ip de nuestro Raspberry Pi a verificar los módulos php cargados

-Modificamos la configuración de fpm
sudo vi /etc/php5/fpm/php-fpm.conf
process.max = 2

-Optimizamos nginx a solo ejecutar un proceso (Raspberry Pi no tiene tanta memoria y podemos quedar sin recursos en la medida que aumente la carga)
sudo vi /etc/nginx/nginx.conf
worker_processes 1;

-Reiniciamos los servicios
sudo service nginx restart
sudo service php5-fpm restart
sudo service fcgiwrap restart

Con esto ya tenemos un eficiente servidor web nginx con FASTCGI. Usarias Raspberry Pi como servidor web, en que proyecto?
Si te resulto útil este articulo, se social, haz un tweet, compártelo con otros por medio de los botones o sígueme en twitter google+facebook o email y podrás estar enterado de todas mis publicaciones.
Disfrútenlo.

Share/Bookmark

Como activar un Raspberry Pi como un Access Point


Raspberry Pi, esa multifacetica board que nos invita a investigar por medio de la electrónica o sacarle provecho a linux instalado en ella.
Una de las posibilidades es usarla como AP (Access Point o punto de acceso wifi), para esto debemos tener una interfaz USB WiFi las cuales por lo general las venden en bundle con la board o se pueden comprar por separado. Como ya imaginaran, hoy nuestro tema sera instalar y configurar paso a paso un AP en una raspberry pi. Daré por hecho que tienes ya instalado Raspbian (debian para raspberry) o sino, es muy fácil instalarlo por medio de NOOBS como muestro en este anterior articulo.

Requerimientos


  • Raspberry Pi
  • Interfaz USB WiFi
  • Nuestro AP tendrá la ip 192.168.42.1 y compartirá por DHCP esta subred


-Instalamos dependencias
sudo apt-get install libnl1 libnl-dev pkg-config gcc hostapd nginx isc-dhcp-server iptables iptables-persistent

-Descargamos el paquete que nos permitirá crear el AP
wget -c https://www.kernel.org/pub/software/network/iw/iw-3.15.tar.gz

-Descomprimimos, entramos a su directorio y compilamos los fuentes
tar xzvf iw-3.15.tar.gz
cd iw-3.15/
make

-Verificamos las capacidades de la interfaz USB WiFi que tenemos conectada. Debemos tener disponible el modo AP como se ve marcado en rojo debajo
./iw list
Wiphy phy0
max # scan SSIDs: 4
max scan IEs length: 2257 bytes
Retry short limit: 7
Retry long limit: 4
Coverage class: 0 (up to 0m)
Device supports RSN-IBSS.
Supported Ciphers:
* WEP40 (00-0f-ac:1)
* WEP104 (00-0f-ac:5)
* TKIP (00-0f-ac:2)
* CCMP (00-0f-ac:4)
Available Antennas: TX 0 RX 0
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
Band 1:
Capabilities: 0x172
HT20/HT40
Static SM Power Save
RX Greenfield
RX HT20 SGI
RX HT40 SGI
RX STBC 1-stream
Max AMSDU length: 3839 bytes
No DSSS/CCK HT40
Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
Minimum RX AMPDU time spacing: 2 usec (0x04)
HT RX MCS rate indexes supported: 0-7, 32
TX unequal modulation not supported
HT TX Max spatial streams: 1
HT TX MCS rate indexes supported may differ
Bitrates (non-HT):
* 1.0 Mbps
* 2.0 Mbps (short preamble supported)
* 5.5 Mbps (short preamble supported)
* 11.0 Mbps (short preamble supported)
* 6.0 Mbps
* 9.0 Mbps
* 12.0 Mbps
* 18.0 Mbps
* 24.0 Mbps
* 36.0 Mbps
* 48.0 Mbps
* 54.0 Mbps
Frequencies:
* 2412 MHz [1] (20.0 dBm)
* 2417 MHz [2] (20.0 dBm)
* 2422 MHz [3] (20.0 dBm)
* 2427 MHz [4] (20.0 dBm)
* 2432 MHz [5] (20.0 dBm)
* 2437 MHz [6] (20.0 dBm)
* 2442 MHz [7] (20.0 dBm)
* 2447 MHz [8] (20.0 dBm)
* 2452 MHz [9] (20.0 dBm)
* 2457 MHz [10] (20.0 dBm)
* 2462 MHz [11] (20.0 dBm)
* 2467 MHz [12] (20.0 dBm) (no IR)
* 2472 MHz [13] (20.0 dBm) (no IR)
* 2484 MHz [14] (20.0 dBm) (no IR)
Supported commands:
* new_interface
* set_interface
* new_key
* start_ap
* new_station
* new_mpath
* set_mesh_config
* set_bss
* authenticate
* associate
* deauthenticate
* disassociate
* join_ibss
* join_mesh
* set_tx_bitrate_mask
* frame
* frame_wait_cancel
* set_wiphy_netns
* set_channel
* set_wds_peer
* probe_client
* set_noack_map
* register_beacons
* start_p2p_device
* set_mcast_rate
* connect
* disconnect
Supported TX frame types:
* IBSS: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* managed: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* AP/VLAN: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* mesh point: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-client: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-GO: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
* P2P-device: 0x00 0x10 0x20 0x30 0x40 0x50 0x60 0x70 0x80 0x90 0xa0 0xb0 0xc0 0xd0 0xe0 0xf0
Supported RX frame types:
* IBSS: 0x40 0xb0 0xc0 0xd0
* managed: 0x40 0xd0
* AP: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* AP/VLAN: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* mesh point: 0xb0 0xc0 0xd0
* P2P-client: 0x40 0xd0
* P2P-GO: 0x00 0x20 0x40 0xa0 0xb0 0xc0 0xd0
* P2P-device: 0x40 0xd0
software interface modes (can always be added):
* AP/VLAN
* monitor
valid interface combinations:
* #{ AP, mesh point } <= 8,
  total <= 8, #channels <= 1
HT Capability overrides:
* MCS: ff ff ff ff ff ff ff ff ff ff
* maximum A-MSDU length
* supported channel width
* short GI for 40 MHz
* max A-MPDU length exponent
* min MPDU start spacing
Device supports TX status socket option.
Device supports HT-IBSS.
Device supports low priority scan.
Device supports scan flush.
Device supports AP scan.

Activamos el DHCP Server

-Modificamos el archivo de configuración del DHCP
sudo vi /etc/dhcp/dhcpd.conf
ddns-update-style none;
authoritative;
subnet 192.168.42.0 netmask 255.255.255.0 {
 range 192.168.42.10 192.168.42.50;
 option broadcast-address 192.168.42.255;
 option routers 192.168.42.1;
 default-lease-time 600;
 max-lease-time 7200;
 option domain-name "example.org";
 option domain-name-servers 8.8.8.8, 8.8.4.4;
}

-Activamos la interfaz wlan0 como la usada por el dhcp server
sudo vi /etc/default/isc-dhcp-server
INTERFACES="wlan0"

-Apagamos la interfaz wlan0 y cambiamos su configuración
sudo ifdown wlan0
sudo vi /etc/network/interfaces
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet static
address 192.168.42.1
netmask 255.255.255.0
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

-Activamos la interfaz wlan0
sudo ifconfig wlan0 192.168.42.1

Activamos el Access Point

-Configuramos nuestro AP teniendo especial cuidado en colocar una buena contraseña e inventarnos un SSID
sudo vi /etc/hostapd/hostapd.conf
interface=wlan0
#driver=rtl871xdrv
ssid=MiPiAP
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=contraseña-ap
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

-Configuramos el camino donde buscar la conf del AP
sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
DAEMON_OPTS="-dd"

Configuramos el NAT

-Ya nuestro AP permite conexiones, ahora debemos permitir que se haga forward del trafico recibido hacia internet
sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1

-Ejecutamos
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

-Agregamos reglas a iptables para que haga NAT de este trafico y lo acepte
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

-Verificamos las reglas estén activas
sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -o eth0 -j MASQUERADE

sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -j ACCEPT

-Guardamos las reglas
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

-Activamos para que se ejecute al hacer boot
sudo vi /etc/network/interfaces
up iptables-restore < /etc/iptables.ipv4.nat

-Activamos los servicios del AP y el DHCP server
sudo service hostapd start
sudo service isc-dhcp-server start

-Verificamos servicios del AP y DHCP
sudo service hostapd status
[ ok ] hostapd is running.

sudo service isc-dhcp-server status
Status of ISC DHCP server: dhcpd is running.

-Los activamos para que se ejecuten al hacer boot
sudo update-rc.d hostapd enable
update-rc.d: using dependency based boot sequencing

sudo update-rc.d isc-dhcp-server enable
update-rc.d: using dependency based boot sequencing

-Ya podemos hacer pruebas de conexión al AP. En el siguiente ejemplo conecto un smartphone Android por wifi y veo el proceso de conexión en logs
sudo tail -f /var/log/syslog
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 IEEE 802.11: authenticated
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 IEEE 802.11: associated (aid 1)
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 RADIUS: starting accounting session 542897F5-00000000
Sep 28 18:30:43 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 WPA: pairwise key handshake completed (RSN)
Sep 28 18:30:44 pibotero dhcpd: DHCPDISCOVER from d8:90:e8:31:f8:00 via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPOFFER on 192.168.42.10 to d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPREQUEST for 192.168.42.10 (192.168.42.1) from d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPACK on 192.168.42.10 to d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPREQUEST for 192.168.42.10 (192.168.42.1) from d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:30:45 pibotero dhcpd: DHCPACK on 192.168.42.10 to d8:90:e8:31:f8:00 (android-2cfd8cb7fa7b0ddf) via wlan0
Sep 28 18:31:25 pibotero hostapd: wlan0: STA d8:90:e8:31:f8:00 WPA: group key handshake completed (RSN)

Muy bien, ya tenemos un AP de bajo costo en producción con Linux instalado en el.
Tienes una Raspberry Pi, en que proyectos la usas? Con que Linux?
Si te resulto útil este articulo, se social, haz un tweet, compártelo con otros por medio de los botones o sígueme en twitter google+facebook o email y podrás estar enterado de todas mis publicaciones.
Disfrútenlo.

Share/Bookmark

Como instalar NOOBS en Raspberry Pi contra reloj

Raspberry Pi, ese pequeño gigante es un lienzo en blanco en el cual puedes plasmar tus ideas como te imagines. Esta pequeña board a la cual le instalamos Linux es poderosa y económica a la vez lo cual nos lleva a montar proyectos en ella que en algún momento deja la SD (memoria externa) vuelta un caos. Aunque como todo en el opensource, nada mas sencillo que comenzar de nuevo y es el tema hoy de nuestro articulo, instalar NOOBS paso a paso en la SD de Raspberry Pi. NOOBS, de las siglas New Out Of Box Software (algo así como software nuevo fuera de la caja) es la forma mas fácil de instalar linux en nuestro Raspberry Pi e incluye varias distribuciones personalizadas para esta board como son Raspbian (lo adivinaron?, Debian), Fedora Mix, etc las cuales puedes escoger a la hora de instalar. Bien, después de esta breve introducción, pasemos a la acción.

-Descargamos NOOBS en su ultima versión en este URL (en este momento la 1.3.10). Sugiero usar un cliente torrent. No tienes uno? En este articulo te enseño a instalar FrostWire

-Colocamos la SD en nuestro pc. Es recomendable tener una SD mínimo de 8GB, como la que muestro en este ejemplo, con sus respectivas particiones. Doy por echo que la SD ya esta particionada o sino, seria crearlas con el comando fdisk

sudo fdisk -l
Disk /dev/sdb: 7892 MB, 7892631552 bytes
4 heads, 16 sectors/track, 240864 cylinders, total 15415296 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0002afb0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            8192     3011718     1501763+   b  W95 FAT32
/dev/sdb2         3014656    15349759     6167552   85  Linux extended
/dev/sdb3        15349760    15415295       32768   83  Linux
/dev/sdb5         3022848     3145727       61440    c  W95 FAT32 (LBA)
/dev/sdb6         3153920    15349759     6097920   83  Linux

-Formateamos la memoria SD
sudo mkfs.fat /dev/sdb1
sudo mkfs.ext4 /dev/sdb3
sudo mkfs.fat /dev/sdb5
sudo mkfs.ext4 /dev/sdb6

-Montamos la partición sdb1, nos pasamos al directorio donde este montada y copiamos el contenido de NOOBS en ella
mount /dev/sdb1 /media/cabrera/4C45-98E2
cd /media/cabrera/4C45-98E2
unzip /home/drivemeca/Downloads/NOOBS_v1_3_10.zip

-Desmontamos la partición y retiramos la SD.
cd
sudo eject /dev/sdb1

La colocamos en el Raspberry Pi y hacemos boot para iniciar desde NOOBS. Con esto ya podemos volver a nuestros proyectos instalando una nueva copia de Linux.
Usas Raspberry Pi? para que proyectos? con que Linux?
Si te resulto útil este articulo, se social, haz un tweet, compártelo con otros por medio de los botones o sígueme en twitter google+facebook o email y podrás estar enterado de todas mis publicaciones.
Disfrútenlo.

Share/Bookmark