domingo, 22 de mayo de 2016

Compilar un paquete DEB a partir del código fuente

Me encontré en la situación de no tener un paquete DEB adecuado para instalar en el sistema, ya que no había portado a la versión estable todavía, pero sí tener acceso a las fuentes del paquete.

Lo primero es instalar  los paquetes básicos para la compilación de paquetes DEB
sudo aptitude install build-essential devscripts fakeroot
Luego buscamos el paquete deseado en la página de búsqueda de paquetes de Debian, y descargamos los archivos fuentes, los cuales suelen ser de la forma:
  • paquete_versión.dsc : Archivo de Control de Fuente Debian (Debian Source Control)
  • paquete_versión.orig.tar.gz : Código fuente original
  • paquete_versión.debian.tar.xz : Modificaciones realizadas para empaquetar la aplicación
Colocamos estos tres archivos en un directorio de trabajo propio, y descomprimimos el archivo tar.xz con el comando:
tar xf paquete_versión.debian.tar.xz
Creamos un directorio nuevo y movemos la carpeta debian recién descomprimida, allí. Esto, porque compilar el paquete se hace desde el directorio que contenga la carpeta debian, y el archivo paquete_versión.orig.tar.gz se busca en el directorio superior (..)
mkdir deb-src
mv debian deb-src/
Para instalar las dependencias de compilación del paquete, la opción sencilla es ejecutar el comando
sudo aptitude build-depends paquete
Pero esto sólo nos funcionará si el paquete ya se encuentra en los repositorios. De lo contrario, aptitude reportará que no conoce dicho paquete. En estos casos, debemos examinar el archivo paquete_versión.dsc o el archivo control que se encuentra dentro del directorio debian e instalar los paquetes indicados en la sección Build-Depends, utilizando el comando:
sudo aptitude install dependencia1 dependencia2 #etc 
La opción más recomendada para compilar el paquete es entrar en deb-src, y ejecutar debuild
cd deb-src
debuild
Sin embargo, esto produjo el siguiente error
dpkg-source: error: aborting due to unexpected upstream changes
Este artículo tiene más información sobre este error. Y una forma distinta de evitarlo.

Finalmente, logré compilar el paquete, sin tanta complicación, utilizando el siguiente comando
dpkg-buildpackage -b -uc
Con lo cual, obtuve el paquete paquete_versión.deb

Para instalarlo este paquete, ejecutamos:
cd ..
sudo dpkg -i paquete_versión.deb
En caso de que APT nos indique que hubo un error de dependencias con la instalación, procedemos a ejecutar
sudo apt-get install -f
Lo cual debería calcular cuáles dependencias es necesario instalar, intalarlas y culminar la instalación de nuestro paquete.

La estructura de los directorios es de la siguiente forma:
  • Directorio de trabajo/
    • paquete_versión.dsc
    • paquete_versión.orig.tar.gz
    • paquete_versión.debian.tar.xz
    • paquete_versión.deb
    • deb-src/
      • debian/

Instalar un paquete DEB no disponible en el repositorio de Bananian

Conseguí una aplicación que quería instalar en mi Banana Pi, pero sólo se encontraba en la rama de pruebas (testing), todavía no había pasado a estable.

Lo primero que hice fue intentar descargar el paquete DEB desde la página de búsqeda de paquetes de Debian, aunque estas instrucciones aplican a cualquier paquete DEB que se desee instalar.

Para instalar el paquete, ejecutamos el comando:
sudo dpkg -i archivo.deb
Lo cual arrojó un error de APT indicando que no se pudo terminar de configurar la aplicación ya que faltaban dependencias. Este mensaje de error es previsible ya que al instalar el paquete de esta forma, APT no descarga las dependencias necesarias automáticamente.

Para decargar estas dependencias, ejecuté el comando de APT que hace las instalaciones y desinstalaciones necesarias para resolver los conflictos de dependencias en el sistema de gestión de paquetes.
sudo apt-get install -f
Al ejecutar este comando, lo más común es que APT calcule las dependencias necesarias, y solicite una confirmación antes de instalar dichas dependencias y culminar la configuración de la aplicación que instalamos desde el archivo DEB. Sin embargo, en esta ocasión, sí me arrojó un error inesperado, pidiendo que confirmase deshacer  dicha instalación.

Entonces fui instalando una por una las dependencias faltantes utilizando el comando de costumbre
sudo aptitude install dependencia
Hasta que conseguí el problema: el paquete requería una versión más reciente de una de las dependencias que la disponible en el repositorio.

Dado que la aplicación que quería instalar no forma parte del núcleo de la distribución, ni tiene otras aplicaciones que dependan de ella, ni tampoco es particularmente vanguardista, decidí intentar compilar el paquete DEB a partir del código fuente.

viernes, 20 de mayo de 2016

Configurando SAMBA en Bananian

Para poder compartir archivos desde el Banana Pi a los terminales en mi red local, decidí crear una carpeta compartida por SMB.
# Crear carpeta donde se almacenarán los archivos
sudo mkdir /home/media

# Otorgar permiso de lectura y ejecución a todos los usuarios locales
sudo chmod 777  /home/media

# Crear sub-carpetas para clasificar los archivos
sudo mkdir /home/media/music
sudo mkdir /home/media/video
sudo mkdir /home/media/photos
sudo mkdir /home/media/ebook

# Instalar SAMBA
sudo aptitude install samba

# Respaldar archivo de configuración por defecto
sudo mv /etc/samba/smb.conf /etc/samba/smb.bak

# Crear nuevo archivo de configuración
sudo nano /etc/samba/smb.conf

# Reiniciar servicio samba
sudo service samba restart
#sudo service smbd restart

El archivo de configuración tiene el siguiente contenido
[global]
workgroup = workgroup
security = user
map to guest = Bad Password
share modes = yes
deadtime = 15
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536

[media]
path = /home/media/
public = yes
writable = no
comment = smb share
printable = no
guest ok = yes
 Esta configuración no incluye mediadas de autenticación, ya que la carpeta compartida está pensada para archivos sin riesgo de confidencialidad. Aún así, el acceso se limita a sólo lectura.

miércoles, 18 de mayo de 2016

Configurar un servidor DLNA en Bananian (Debian)

Como parte de mi interés de crear un centro de medios utilizando el Banana Pi, decidí configurar un servidor DLNA.
# Crear carpeta donde se almacenarán los archivos
sudo mkdir /home/media

# Otorgar permiso de lectura y ejecución a todos los usuarios locales
sudo chmod 755  /home/media

# Crear sub-carpetas para clasificar los archivos
sudo mkdir /home/media/music
sudo mkdir /home/media/video
sudo mkdir /home/media/photos

# Instalar minidlna
sudo aptitude install minidlna

# Modificar media_dir=/var/lib/minidlna
# Para que quede como media_dir=/home/media
sudo nano /etc/minidlna.conf

# Reiniciar servicio minidlna
sudo service minidlna restart