Super and Distributed Computing Summer Camp, Manizales 2014

School Mission

Taking advantage of the Internet and high speed networks available today, one can exploit high performance computing infrastructures from anywhere, even located in the middle of the nature.

Inspired by this idea SC-Camp is an initiative of researchers to offer to undergraduate and master students state-of-the-art lectures and programming practical sessions upon High Performance and Distributed Computing topics. SC-Camp is a non-profit event, addressed to every student including those that lack of financial backup. Last year all students that applyied in due time received a grant to attend lectures, including meals and accomadations. This year the event will be hosted by BIOS Centro de Bioinformática Y Biología Computacional in the outstanding park of Manizales, Colombia.

SC-Camp 2014

SC-Camp 2014 features 6 days of scientific sessions and 1 leisure day with an organized activity (for example, hiking or rafting). During the lectures there will be held several parallel programming practical sessions.

We welcome applications of undergraduate (preferable at last year) or master students from all areas of engineering and science with strong interest upon High Performance and Distributed Computing. Due to the advanced content of lectures some basic notions of Parallel and Distributed Computing along with programming skills are desired. All courses and lectures will be held in English, thus a good knowledge of English -both oral and written- is mandatory. The scientific and steering committee will evaluate the application forms based on the applicant’s scientific background and their motivation letter. This year, as last year, we expect to accept from 20 up to 40 students. The registration fee includes accommodation and access to all scientific lectures.

Topics

The summer school focus on the following topics:

  • Parallel Programming
  • Multiprocessors Programming
  • Distributed Systems
    • Cluster Computing
    • Grid Computing
    • Cloud Computing
    • Volunteer Computing
    • Hybrid and GPU Programming
  • Resource/Job Management & Scheduling
  • Virtualisation
  • Fault tolerance
  • Green Computing
  • Performance Evaluation

Datos importantes

Fechas: agosto de 2014 del 10 al 16.

Costo: USD $150.

Recursos

Configurar Transmission para que envíe un mensaje por Telegram cada vez que descargue un Torrent

Introducción

Transmission_logoUn paso mas en la automatización de las tareas consiste en configurar medios para que el usuario sea notificado del estado de las mismas.  Para experimentar con los avances obtenidos anteriomente con el servicio de Telegram, a continuación se describirá el procedimiento necesario par configurar a Transmission (cliente de torrent) para que notifique al usuario a través de un mensaje cada vez que un torrent sea descargado completamente.

telegram_message_for_torrent

Precondición

  1. Transmission correctamente instalado.
  2. Cliente CLI de Telegram instaldo.
  3. Script (telegram_sendmsg.sh) instalado.

Configuración inicial del sistema operativo

Por defecto la cuenta del sistema operativo que corresponde con el usuario de Transmission viene por seguridad con el shell desactivado y sin directorio home.  Para integra el envío de mensajes con Telegram es necesario modificar esto.

Ajuste los siguientes pasos de acuerdo con la información específica de su sistema operativo.  Los pasos descritos han sido implementados bajo Debian/Raspbian, algunos nombres pueden variar de acuerdo con la distribución de Linux que utilice.

$ sudo usermod --shell /bin/bash debian-transmission

$ sudo usermod --home /home/debian-transmission debian-transmission

Si la ruta del directorio home no existe es necesario crearla.

$ sudo mkdir /home/debian-transmission

$ sudo chown -R debian-transmission:debian-transmission /home/debian-transmission

Configuración inicial de Telegram

Para utilizar Telegram con Transmission es necesario configurar el primero bajo la cuenta del usuario del segundo de la siguiente manera.

Convertirse en el usuario de Transmission.

$ sudo bash

$ su - debian-transmission

Ejecutar Telegram por primera vez, la aplicación le solicitará el número telefónico de la cuenta (que ya debe estar activa) que se utilizará para enviar los mensajes.

Especifique este número de la forma +CÓDIGO_PAÍS TELÉFONO.  Posteriormente especifique el código de confirmación enviado a través de Telegram.

$ telegram -k /etc/telegram/server.pub

Telegram-client version 0.01-beta, Copyright (C) 2013 Vitaly Valtman
Telegram-client comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.

Telephone number (with '+' sign): +573001234567

 *** phone registered
 *** sending code
 *** send_code: dc_num = 1

Code from sms (if you did not receive an SMS and want to be called, type "call"): 12345

User Telegram: 0 unread

> quit

Convertirse de regreso en el usuario sin privilegios habitual.

$ exit

$ exit

Crear el script para Transmission

Crear el script que realizará las tareas que deberán suceder una vez Transmission recibe un torrent completo, en este caso enviará un mensaje a través de Telegram utilizando el script de apoyo (telegram_sendmsg.sh).

Este script puede hacer uso de las siguientes variables de ambiente proporcionadas por Transmission.

TR_APP_VERSION Versión de Transmission.
TR_TIME_LOCALTIME Fecha y hora de recibo del torrent.
TR_TORRENT_DIR Directorio donde se almacenó el torrent.
TR_TORRENT_HASH Hash del torrent una vez recibido.
TR_TORRENT_ID Identificador del torrent.
TR_TORRENT_NAME Nombre del torrent recibido.

Copie el script torrent_done.sh en una ubicación conocida como /etc/transmission-daemon.

$ sudo chmod +x /etc/transmission-daemon/torrent_done.sh

Personalice las siguientes variables definidas en el script.

PROGRAM Ubicación del script telegram_sendmsg.sh.  Si este se encuentra ubicado en el PATH no debería necesitar ningún cambio en este variable.
RECIPIENT Nombre del contacto (peer) que recibirá los mensajes de Telegram.
MESSAGE Mensaje que será enviado cada vez que llegué un torrent completo.

Pruebas del envío de mensajes

Verificar que el envío de mensajes es exitoso con las tres aplicaciones o scripts implementados.  Ajuste el receptor de los mensajes de prueba según su caso.

Primero, verificar que Telegram CLI envía correctamente los mensajes.

$ telegram -k /etc/telegram/server.pub

> msg Pepito_Pimenton test1
> quit

Segundo, verificar el funcionamiento del script telegram_sendmsg.sh.

$ telegram_sendmsg.sh Pepito_Pimenton test2

Tercero, verificar el funcionamiento del script torrent_done.sh.

$ /etc/transmission-daemon/torrent_done.sh

Configurar Transmission

Configurar Transmission para que ejecute el script torrent_done.sh tan pronto como reciba un torrent completo.

Detener el servicio de Transmission.  Si esto no se realiza los siguientes cambios en la configuración no serán tenidos en cuenta.

$ sudo service transmission-daemon stop

Ajustar las siguientes opciones de configuración.

$ sudo vi /etc/transmission-daemon/settings.json

    "script-torrent-done-enabled": true,
    "script-torrent-done-filename": "/etc/transmission-daemon/torrent_done.sh",

Iniciar nuevamente el servicio de Transmission.

$ sudo service transmission-daemon start

Configuración final del sistema operativo

Por seguridad es conveniente remover el acceso al shell por parte del usuario de Transmission.

$ sudo usermod --shell /bin/false debian-transmission

Siendo un tanto paranóicos también puede ser conveniente bloquear la cuenta para impedir su acceso directo.

$ sudo passwd -l debian-transmission

Tenga en cuenta que se realizaron estos pasos para cuando necesite acceder como este usuario.

Recursos

Enviar mensajes a Telegram desde línea de comando – utilizando un script

Introducción

telegram_logoEn una publicación anterior se describieron los pasos necesarios para instalar el cliente de Telegram en Linux para enviar mensajes desde la línea de comando.  Esto es particularmente interesante si se considera para el envío de notificaciones (sistema operativo, aplicaciones, etc.) a un adminstrador o usuario en particular.

Desarfortunadamente para este caso, la herramienta de vysheng presenta una intefaz interactiva.  Revisando diferentes foros y el repositorio de código del proyecto, el autor menciona que tiene pensando incluir un modificador para permitir el envío de mensajes de manera desatendida, sin embargo hasta el momento esa opción no ha sido desarrollada.

Para solventar esta situación he creado un procedimiento muy simple que se describe a continuación.

Precondiciones

  1. El cliente CLI de Telegram ha sido instalado en Linux.
  2. El usuario ha acedido a Telegram desde su teléfono móvil utilizando el número telefónico con el que se va a configurar el cliente CLI.
  3. Se ha ejcutado una primera vez la aplicación CLI de telegram y se ha proporcionado el código que envía el servicio a través de SMS.

Importante!  Debe tenerse en cuenta que durante la configuración inicial de Telegram (paso #3) se crea por defecto el directorio ~/.telegram el cual es por supuesto dependiente del usuario del sistema operativo con que se ejecute así que este paso debe realizarse con el usuario que efectivamente realizará el envío de los mensajes.

Enviar mensajes con una unica instrucción

Para el uso de esta aplicación para el envío de advertencias o notificaciones por parte de software de terceros será necesario poder hacerlo ejecutando una unica instrucción que no requiera de la intervención del usuario.

Para hacer esto con el cliente CLI de Telegram se deberá ejecutar la siguiente instrucción.

$ telegram -k /etc/telegram/server.pub -W <<EOF
msg Pepito_Pimenton "Este es el mensaje"
safe_quit
EOF

En la instrucción anterior deberá ajustarse el destinatario del mensaje (peer) y el mensaje a transmitirse.

Enviar mensajes con un script

Instalación y configuración

Para simplificar este procedimiento he creado el script telegram_sendmsg.sh que se debe copiar en una ruta disponible par los usuarios como por ejemplo /usr/bin.

El script incluye una primera sección de configuración con las siguientes variables.

PROGRAM Cliente CLI de Telegram.Por defecto esta opción se configurará por su propia cuenta si la aplicación ha sido instalada dentro del PATH.  Modifique su valor de lo contrario.
SERVER_PUBKEY Referencia la llave pública del servicio de Telegram.Por defecto utiliza la ubicación global de la llave.  Modifique esta opción si la llave se instaló en otra ubicación.
RECIPIENT Receptor del mensaje.Por defecto recibe el parámetro desde la línea de comando.  Normalmente no debera necesitar modificar este valor.
CONFIG_FILE Configuración de Telegram para el usuario actual que invoca el cliente.Por defecto es vacía y referencia a la ubicación por defecto: ~/.telegram.  Modifique esta opción si la configuración del usuario ha sido creada en otra ubicación.

Uso

Para utilizar el script utilice la siguiente sintáxis.

telegram_sendmsg.sh receptor mensaje

Por ejemplo de la siguiente manera.

$ telegram_sendmsg.sh Pepito_Pimenton "Hola Mundo"

Recursos

Enviar mensajes a Telegram desde línea de comando

Introducción

telegram_logoA continuación se describen los pasos necesarios para construír, configurar y utilizar la herramienta de línea de comando para enviar mensajes a través del servicio de mensajería móvil Telegram.

Para que esta aplicación pueda funcionar correctamente será necesario que previamente haya sido creado el usuario en Telegram, es decir, que el usuario haya utilizado el servicio desde un dispositivo móvil con el número telefónico que utilizará posteriormente para identificarse.

Construcción

Instalar los prerequisitos para la construcción de la aplicación de línea de comando.

$ sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev

Obtener la distribución mas reciente del código fuente de la aplicación.

$ git clone https://github.com/vysheng/tg.git && cd tg

Compilar  y enlazar la aplicación.

$ ./configure 

$ make

Instalación

Ubicar la llave pública del servicio en su ubicación por defecto.

$ sudo mkdir /etc/telegram/

$ sudo cp tg-server.pub /etc/telegram/server.pub

$ sudo chmod 644 /etc/telegram/server.pub

Ubicar el binario de la aplicación en una ruta conocida dentro del PATH.

$ sudo cp telegram /usr/bin

$ sudo chmod 755 /usr/bin/telegram

Uso

Si se siguieron los pasos establecidos anteriormente ubicando la llave pública del servicio bajo /etc/telegram.

$ telegram

De lo contrario, si se decide utilizar una ubicación diferente se deberá especficar la llave pública del servicio con el parámetro -k del comando telegram cada vez que se vaya a ejecutar.

$ telegram -k /ruta/tg-server.pub

Configuración inicial

La primera vez que se ejecuta la aplicación para un usuario específico es necesario configurarla para asociarle la cuenta de Telegram que utilizará.

telegram_firstconfig
Para esto se deben realizar los siguientes pasos.

  1. Especificar el número de teléfono móvil de la forma: +Código del País Teléfono.
  2. Especificar el código enviado por Telegram a ese número telefónico a través de SMS.

Enviar un mensaje

Listar los contactos disponibles.

> contact_list

User #XXXXXXXX: Pepito Pimenton (Pepito_Pimenton 573012345678) offline. Was online [2014/05/12 01:47:42]
...

Para enviar un mensaje se debe utilizar el comando msg con al siguiente sintáxis.

msg <peer> Text

El destinatario (o peer) corresponde con el nombre del contacto reemplazando sus espacios por guíones bajos: Pepito Pimenton -> Pepito_Pimenton.  Por ejemplo.

> msg Pepito_Pimenton "Hola Mundo"

Sugerencia!  Utilice la tecla TAB para autocompletar los comandos de telegram o los nombres de los contactos.

Comandos soportados

Messaging

  • msg <peer> Text – sends message to this peer
  • fwd <user> <msg-seqno> – forward message to user. You can see message numbers starting client with -N
  • chat_with_peer <peer> starts one on one chat session with this peer. /exit or /quit to end this mode.
  • add_contact <phone-number> <first-name> <last-name> – tries to add contact to contact-list by phone
  • rename_contact <user> <first-name> <last-name> – tries to rename contact. If you have another device it will be a fight
  • mark_read <peer> – mark read all received messages with peer

Multimedia

  • send_photo <peer> <photo-file-name> – sends photo to peer
  • send_video <peer> <video-file-name> – sends video to peer
  • send_text <peer> <text-file-name> – sends text file as plain messages
  • load_photo/load_video/load_video_thumb <msg-seqno> – loads photo/video to download dir
  • view_photo/view_video/view_video_thumb <msg-seqno> – loads photo/video to download dir and starts system default viewer

Group chat options

  • chat_info <chat> – prints info about chat
  • chat_add_user <chat> <user> – add user to chat
  • chat_del_user <chat> <user> – remove user from chat
  • rename_chat <chat> <new-name>
  • create_group_chat <user> <chat topic> – creates a groupchat with user, use
  • chat_add_user to add more users

Search

  • search <peer> pattern – searches pattern in messages with peer
  • global_search pattern – searches pattern in all messages

Secret chat

  • create_secret_chat <user> – creates secret chat with this user
  • visualize_key <secret_chat> – prints visualization of encryption key. You should compare it to your partner’s one

Stats and various info

  • user_info <user> – prints info about user
  • history <peer> [limit] – prints history (and marks it as read). Default limit = 40
  • dialog_list – prints info about your dialogs
  • contact_list – prints info about users in your contact list
  • suggested_contacts – print info about contacts, you have max common friends
  • stats – just for debugging
  • show_license – prints contents of GPLv2
  • help – prints this help

Exit the application

  • quit
  • safe_quit

Recursos

Actualizar el firmware y kernel de las Raspberry Pi

Introducción

RaspberryPiLogoAsí como es posible actualizar el sistema operativo (Raspbian) de la tarjeta Raspberry Pi también es posible actualizar el firmware de la misma y su kernel.

Esto normalmente sucede mediante el paquete raspberrypi-bootloader el cual se encuentra contenido en los repositorios estándar de Rasbpian.  Esta versión se actualiza con regular frecuencia y a pesar de no acostumbra  a ser la última disponible, acostumbra  a ser una bastante probada y estable.

Estos archivos -kernel, firmware y bootloader- residen en una partición independiente del directorio raíz en la tarjeta SD.  Por este motivo no es la Raspberry Pi que se actualiza sino la tarjeta SD con el sistema operativo.

Procedimiento

Si se desea actualizar el firmware y el kernel de la tarjeta a las últimas versiones disponibles se debe utilizar el siguiente comando.

$ sudo rpi-update

Debe tenerse en cuenta que esta versión posiblemente sea menos estable que la incluida en los repositorios.

Análisis de la actualización

Con la versión actual del firmware que se encuentra disponible en el repositorio de Raspbian.

$ sudo aptitude show raspberrypi-bootloader

    Package: raspberrypi-bootloader          
    State: installed
    Automatically installed: no
    Version: 1.20140107-1
    Priority: extra
    Section: admin
    Maintainer: Alex Bradbury <asb@asbradbury.org>
    Architecture: armhf
    Uncompressed Size: 53.9 M
    Description: Raspberry Pi bootloader
     This package contains the Raspberry Pi bootloader (plus,   temporarily, a kernel).
    Homepage: https://github.com/raspberrypi/firmware

Se cuenta con las siguientes versiones de firmware y kernel.

$ /opt/vc/bin/vcgencmd version

    Jan  6 2014 21:19:57
    Copyright (c) 2012 Broadcom
    version b00bb3ae73bd2799df0e938b7a5f17f45303fb53 (clean) (release)

$ uname -a

    Linux anita 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l GNU/Linux

Una vez se realizó la actualización del software utilizando rpi-update se obtuvieron las siguientes versiones.

$ /opt/vc/bin/vcgencmd version

    May  9 2014 16:52:52
    Copyright (c) 2012 Broadcom
    version c8ed097f7c23249e702bea3ed6b5720136ba00e4 (tainted) (release)

$ uname -a

    Linux anita 3.12.19+ #681 PREEMPT Fri May 9 16:36:10 BST 2014 armv6l GNU/Linux

Recursos

Actualizar Raspbian para Raspberry Pi

raspbianYa que Raspbian está directamente basado en Debian, la gran mayoría de comandos y procedimientos son compatibles.

La actualización del sistema operativo se puede realizar utilizando apt-get como se muestra a continuación.

 

$ sudo apt-get update

$ sudo apt-get dist-upgrade

O utilizando aptitude como prefiero personalmente.

$ sudo aptitude update

$ sudo aptitude safe-upgrade

Recursos

Cambiar una contraseña de Windows 7 desde Linux Ubuntu 14.04 utilizando chntpw

Introducción

A continuación se describen los pasos necesarios para modificar una contraseña de un usuario de Windows desde Linux Ubuntu, para seguirlos es necesario poder montar la partición física donde se encuentra instalado Windows desde la máquina que ejecuta el Linux.

Este procedimento es útil para recuperar el acceso de usuarios que han olvidado su contraseña (especialmente los administradores).

Instalación de chntpw

$ sudo aptitude install chntpw

Identificar el sistema operativo del usuario

En una terminal montar la partición donde se encuentra el Windows que contiene al usuario cuya contraseña se va a modificar y ubicarse en el directorio System32/config.

$ cd /windows/Windows/System32/config

Gestionar la información de la cuenta

Listar la información de las cuentas de usuario disponibles en el sistema operativo.

$ sudo chntpw -l SAM

chntpw version 0.99.6 110511 , (c) Petter N Hagen
Hive <SAM> name (from header): <SystemRootSystem32ConfigSAM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 666c <lf>
File size 262144 [40000] bytes, containing 6 pages (+ 1 headerpage)
Used for data: 247/20352 blocks/bytes, unused: 18/4032 blocks/bytes.


* SAM policy limits:
Failed logins before lockout is: 0
Minimum password length        : 0
Password history count         : 0
| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrador                  | ADMIN  | dis/lock |
| 01f5 | Invitado                       |        | dis/lock |
| 03e8 | Usuario                        | ADMIN  |          |

Modificar la contraseña del usuario Usuario.

$ sudo chntpw -u Usuario SAM

Puede elegir una de las siguientes opciones a realizar sobre la contraseña.

  • Dejar la cuenta sin contraseña (1).
  • Especificar una nueva contraseña para la cuenta (2).
  • Promover al usuario a Administrador (3).
  • Desbloquear y activar la cuenta (4).

Recursos

Instalar un cliente de torrent en la Raspberry Pi con Transmission en Raspbian

Introducción

Transmission_logoLa idea general consiste en implementar un cliente de Torrent que se ejecute continuamente en una Raspberry Pi y sea administrable a través de una interfaz web.

Como cliente torrent se eligió Transmission ya que se ha tenido una buena experiencia con Deluge pero desafortunadamente su cliente web actualmente no es compatible con los navegadores móviles.  La interfaz web de Transmission es mucho mas simple.

Establecer el punto de montaje del almacenamiento

El almacenamiento de los archivos (descargados y en proceso de descarga) se realizará en una unidad USB que deberá ser montada automáticamente bajo /media/storage1.

Identificar cual es el dispositivo que referencia la unidad USB que se utilizará como almacenamiento.  En este caso será /dev/sda1.

$ sudo fdisk -l

Disk /dev/mmcblk0: 3904 MB, 3904897024 bytes
4 heads, 16 sectors/track, 119168 cylinders, total 7626752 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: 0x000981cb

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     7626751     3751936   83  Linux

Disk /dev/sda: 32.5 GB, 32463912960 bytes
255 heads, 63 sectors/track, 3946 cylinders, total 63406080 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: 0x0005d951

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    63406079    31702016   83  Linux

Obtener el UUID de la partición a montarse automáticamente.

$ sudo blkid /dev/sda1

/dev/sda1: LABEL="storage1" UUID="12c4ff69-21a4-5c24-b126-98982b207782" TYPE="ext4

Actualizar el archivo de montaje automático de particiones (fstab) con la información de la partición contenida en la unidad USB de almacenamiento (ver último registro agregado).

$ sudo vi /etc/fstab

proc            /proc           proc    defaults          0       0 /dev/mmcblk0p1  /boot           vfat    defaults          0       2 /dev/mmcblk0p2  /               ext4    defaults,noatime  0       1

## Storage1
UUID=12c4ff69-21a4-5c24-b126-98982b207782    /media/storage1        ext4    rw,user,errors=remount-ro    0    0

Crear el punto de montaje donde se seguirá montando la unidad USB.

$ sudo mkdir /media/storage1

$ sudo chown pi:plugdev /media/storage1

$ sudo chmod 755 /media/storage1

Remontar todas las particiones para que se incluya la recién creada para storage1.

$ sudo mount -a

Instalación de Transmission

$ sudo aptitude install transmission-daemon

Configuración incial

Detener el servicio.  Se debe tener en cuenta que si no se realiza esto, los cambios que se realicen en la configuración serán desechados durante la siguiente ejecución del servicio.

$  sudo service transmission-daemon stop

Editar el archivo de configuración de Transmission.

$  sudo vi /etc/transmission-daemon/settings.json

Ajustar los siguientes valores según las necesidades del contexto.

 "download-dir": "/media/storage1/downloaded",
 "incomplete-dir": "/media/storage1/downloading",
 "incomplete-dir-enabled": true,
 "rpc-password": "MiClaveSecreta",
 "rpc-port": 4040,
 "rpc-url": "/transmission/",
 "rpc-username": "torrents",
 "rpc-whitelist": "127.0.0.1,192.168.1.*",
 "rpc-whitelist-enabled": true,

En este caso se está estableciendo la siguiente configuración.

  • Los archivos ya descargados se almacenarán en downloaded mientras que los ya descargados se almacenarán en downloading.
  • El acceso web se realizará a través del puerto 4040 de la ubicación de la tarjeta Raspberry Pi.
  • Para acceder a la interfaz web se deberá utilizar el usuario torrents y la contraseña MiClaveSecreta.  Este acceso sólo será válido desde localhost o desde cualquier equipo de la red 192.168.1.x.
  • La contraseña (especificada en el campo rpc-password de manera plana) será reemplazada por su hash tan pronto como se reinicie el servicio.

Crear los directorios para las descargas en proceso y las finalizadas según se determinaron en la configuración.

$ sudo mkdir /media/storage1/downloaded

$ sudo mkdir /media/storage1/downloading

$ sudo chown debian-transmission:debian-transmission /media/storage1/downloaded

$ sudo chown debian-transmission:debian-transmission /media/storage1/downloading

$ sudo chmod 755  /media/storage1/downloaded

$ sudo chmod 755  /media/storage1/downloading

Reiniciar el servicio para que los cambios de la configuración recién hechos sean tenidos en cuenta.

$  sudo service transmission-daemon start

 

Configuración inicial de Raspbian

Introducción

raspbianRaspbian está basado en Debian y es uno de los sistemas operativos mas utilizados por las tarjetas Raspberry Pi.

Una vez este se encuentra instalado en la tarjeta SD y la Raspberry Pi es iniciada con él, se realiza un proceso de configuración básica del sistema operativo.  Este proceso puede realizarse también en cualquier momento ejecutando el siguiente comando.

$ sudo raspi-config

QEMU_001

A continuación se describen las opciones de configuración mas comúnmente utilizadas.

Expandir el sistema de archivos

La opción Expand Filesystem permite que la partición raíz del sistema operativo tome posesión del resto del espacio libre de la tarjeta SD.  Esto será muy útil cuando se cuente con una tarjeta SD de gran tamaño para la Raspberry Pi.

Cambiar la contraseña del usuario

Por defecto, el usuario pi tiene como contraseña asignada la palabra raspberry.  Es muy recomendado por motivos de seguridad que se cambie esta contraseña lo mas pronto posible.

Tipo de inicio

QEMU_004La opción Enable Boot to Desktop/Scratch permite especificar si se desea que la carga del sistema operativo termine en una consola de texto, un escritorio gráfico o en el lenguaje de programación Scratch.

Opciones de internacionalización

QEMU_006Las Internationalisation Options permiten realizar los siguientes ajustes.

  • Localización: lenguaje y ajustes regionales.
  • Zona horaria.
  • Distribución del teclado.

En lo personal prefiero configurar mi teclado con la distribución internacional con teclas muertas, para esto se deberá seleccionar la siguiente ruta de opciones: Generic 105-key (Intl) PC > English (US) – English (US, international with dead keys).

Activar la cámara

La opción Enable Camera permite activar el acceso a la cámara de la Raspberry Pi cuando se cuenta con este periférico.

Agregar a Rastrack

La opción Add to Rastrack permite a la Raspberry Pi registrarse en el sitio de Rastrack para aparecer en el mapa mundial.

Overclocking

QEMU_015La opción de Overclock permite alterar manualmente la velocidad del procesador para obtener un mayor desempeño.  Se debe tener cuidado con esta manipulación ya que puede reducir drásticamente el tiempo de vida de la tarjeta.

Cambiar el hostname

Bajo Advanced Options está la opción Hostname que permite cambiar el nombre de la tarjeta.

Servicio de acceso remoto seguro

Bajo Advanced Options está la opción SSH que permite activar o desactivar el acceso remoto seguro a través del protocolo SSH.

Interfaz serial

Bajo Advanced Options está la opción SPI que permite activar o desactivar el acceso a la Serial Peripheral Interface (SPI).

Configuración de audio

QEMU_017
Bajo Advanced Options está la opción Audio que permite configurar el tipo de audio que se obtendrá de la tarjeta.

Actualizar esta herramienta

Bajo Advanced Options está la opción Update que permite configurar el raspi-config que se está utilizando.

Emular la Raspberry Pi con Raspbian utilizando QEMU

Introducción

raspbianEs posible ejecutar Raspbian (ARM 1176) desde un PC (x86) mediante el uso de QEMU.

La emulación no es perfecta ya que aún no incluye todos los componentes ni es muy rápida, sin embargo será útil para efectos de experimentación.

Instalación de QEMU

$ sudo aptitude install qemu-system-arm qemu-system-common qemu-utils

Verificar que se cuenta con el soporte necesario para la CPU 1176 o la 1136-r2.

$ qemu-system-arm -cpu help | grep 1176

$ qemu-system-arm -cpu help | grep 1136

Si su distribución no cuenta con el soporte necesario, es posible compilar QEMU con soporte para ARM desde fuentes.

Si se desea utilizar Windows, es posible obtener una versión reciente de la distribución binaria de QEMU.

Obtener Raspbian

Descargar la versión mas reciente disponible en el sitio web oficial.

$ wget http://downloads.raspberrypi.org/raspbian_latest

Verificar la integridad del paquete descargado comparando su hash SHA1 con el especificado en el sitio de descargas oficial.

$ sha1sum 2014-01-07-wheezy-raspbian.zip

9d0afbf932ec22e3c29d793693f58b0406bcab86  2014-01-07-wheezy-raspbian.zip

Descomprimir el paquete descargado para obtener la imagen del sistema operativo.

$ unzip 2014-01-07-wheezy-raspbian.zip

Obtener el kernel

Para poder realizar la emulación de ARM desde x86 es necesario obtener un kernel compatible.  Al parecer el kernel mas utilizado para este tipo de emulación es el construido por xecdesign.com.

$ wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu

Primer boot

En este primer inicio del sistema operativo será necesario realizar algunos ajustes al sistema operativo.

$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda 2014-01-07-wheezy-raspbian.img

Tenga en cuenta las siguientes recomendaciones.

  • Ajuste el nombre del archivo de la imagen del sistema operativo según la versión descargada.
  • No asigne mas de 256MB de memoria RAM a la emulación.

Comentar la siguiente línea en el archivo ld.so.preload.

$ vi /etc/ld.so.preload

    # /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so

De manera opcional, crear el archivo 90-qemu.rules con el siguiente contenido con el fin de crear enlaces a los dispositivos de los discos con nombres iguales a los utilizados por la Raspberry Pi.

$ vi /etc/udev/rules.d/90-qemu.rules

    KERNEL=="sda", SYMLINK+="mmcblk0"
    KERNEL=="sda?", SYMLINK+="mmcblk0p%n"
    KERNEL=="sda2", SYMLINK+="root"

Reiniciar la emulación.

$ shutdown -t now

 Iniciar la emulación

$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2014-01-07-wheezy-raspbian.img

Recursos