apt-pinning: poder instalar paquetes de distintas ramas

Si usamos Debian Stable, a veces es necesario instalar un paquete más actualizado que el que existe en Stable. Podemos instalar paquetes de distintas ramas, aunque no es muy recomendable, sobre todo si modificas paquetes básicos (libc6, etc).

Estos pasos están hechos tomando Debian Wheezy como rama Stable.

Primero crearemos el archivo /etc/apt/preferences y dentro podremos:

Package: *
Pin: release o=Debian,n=wheezy-updates
Pin-Priority: 990

Package: *
Pin: release a=jessie
Pin-Priority: 800

Package: *
Pin: release a=sid
Pin-Priority: 700

Lo siguiente es crear el archivo /etc/apt/apt.conf y dentro añadir:

APT::Default-Release "wheezy";

Por último, nos faltaría añadir las fuentes al archivo /etc/apt/sources.list:

deb http://ftp.es.debian.org/debian jessie main contrib non-free
deb http://ftp.es.debian.org/debian sid main contrib non-free

Actualizamos la lista de paquetes: aptitude update

Para instalar una versión de una rama no Stable, hay que usar el parámetro -t. Por ejemplo, aptitude install -t sid nodejs

Instalar node.js y npm

Estas dos aplicaciones no están aún en Debian Wheezy, por tanto instalaremos desde las fuentes.

Primero necesitamos instalar node.js (NOTA: no hagáis git clone del repositorio de github porque instalará una versión «pre» y tendréis problemas para instalar módulos con npm) :

cd /tmp
wget http://nodejs.org/dist/node-latest.tar.gz
tar xzvf node-latest.tar.gz && cd node-v*
./configure
make
make install

Si falla algo, es por las dependencias. Yo siempre instalo module-assistant porque instala lo básico para muchas compilaciones:

aptitude install module-assistant
m-a update && m-a prepare

Node.js instala npm. En caso de que queramos, por lo que sea, instalar sólo npm:

wget -O - https://npmjs.org/install.sh | sh

pip uninstall no desinstala

Instalé el paquete de Debian Wheezy python-pip hace tiempo. Lo usaba para instalar y desinstalar cosas hasta que me di cuenta de que pip uninstall no desinstalaba lo que le indicaba.

Buscando llegué a este bug, que es exactamente lo que me pasaba. Ahí viene la solución para instalar pip desde su repositorio:

aptitude install python-setuptools
wget -O - https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python

En Debian también hay un bug, que dice que falla sólo si no usas pip en un virtualenv.

Limitar el número de conexiones por IP

Ofrezco un servicio en uno de mis servidores al que conectan clientes. Estos clientes son programados por sus dueños y no todos realizan una única conexión, como debería ser. Un día me encontré con un mismo cliente que estaba conectado con 10 clientes, cosa innecesaria.

Para evitar este problema, he limitado a 2 conexiones (dar una de margen, por si acaso) al puerto del servicio en cuestión:

iptables -I INPUT -p tcp --syn --dport 12345 -m connlimit --connlimit-above 2 -j REJECT

Fuente: http://romanr.info/iptables/connlimit/

Si usamos UFW podemos editar el archivo /etc/ufw/before.rules y añadir la siguiente entrada antes de COMMIT:

-A ufw-before-input -p tcp --syn --dport 12345 -m connlimit ! --connlimit-above 2 -j ACCEPT

Fuente: http://florent.clairambault.fr/limiting-number-of-connections-per-ip-with-ufw