agosto 29, 2019
julio 27, 2019
Como reinstalar una nueva imagen de Raspberry Pi desde dentro y por ssh
Sin sacar siquiera la tarjeta de la RasperryPi :D (entre otras cosas por que ya no dispongo de lector de tarjetas). El sistema se que tenía era bastante viejo y tenía una debian Wheezy (7) para la que ya no se hacen paquetes. Total, imposible de hacer un update/upgrade. Aquí los pasos para reinstalar el sistema de nuevo con la última versión, todo por ssh, sin despeinarse ;)
Descargamos la ultima raspbian desde https://www.raspberrypi.org/downloads/raspbian/ en mi caso he cogido la lite.
Vamos a editar la imagen y transmitirla ya modificada para que el sistema arranque directamente con SSH e IP fija:
Descargamos la ultima raspbian desde https://www.raspberrypi.org/downloads/raspbian/ en mi caso he cogido la lite.
Vamos a editar la imagen y transmitirla ya modificada para que el sistema arranque directamente con SSH e IP fija:
$ mkdir rpi
$ cd rpi
$ 7z x ../2019-07-10-raspbian-buster-lite.zip
$ fdisk -l 2019-07-10-raspbian-buster-lite.img
Disk 2019-07-10-raspbian-buster-lite.img: 2 GiB, 2197815296 bytes, 4292608 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
Disklabel type: dos
Disk identifier: 0x17869b7d
Device Boot Start End Sectors Size Id Type
2019-07-10-raspbian-buster-lite.img1 8192 532480 524289 256M c W95 FAT32 (LBA)
2019-07-10-raspbian-buster-lite.img2 540672 4292607 3751936 1,8G 83 Linux
Montamos sobre loop devices las dos particiones (el valor del offset sale de multiplicar el comienzo de la partición por el tamaño de sector: 8192 * 512 = 4194304):
$ sudo losetup /dev/loop1 -o 4194304 2019-07-10-raspbian-buster-lite.img
$ sudo losetup /dev/loop2 -o 276824064 2019-07-10-raspbian-buster-lite.img
$ mkdir p1 p2
$ sudo mount /dev/loop1 p1
$ sudo mount /dev/loop2 p2
Ahora tenemos las particiones montadas en sendos directorios.
Para activar el ssh necesitamos crear en la primera partición un archivo llamado "ssh":
$ echo ssh > p1/ssh
Para fijar nuestra ip debemos editar el archivo "p2/etc/dhcpcd.conf", al final del archivo habilitamos el interfaz (por ej, el eth0)
# Example static IP configuration:
interface eth0
static ip_address=192.168.1.2/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.1.1
static domain_name_servers=8.8.8.8
Desmontamos las particiones y los loops:
$ sudo umount /dev/loop1
$ sudo umount /dev/loop2
$ sudo losetup -D
Ya tenemos la imagen preparada, para guardarla sobre la SD vamos a transmitirla por SSH directamente. Debemos activar el acceso root por ssh: "sudo passwd root" en la raspberry. Editar el /etc/sshd si fuera necesario.
Detener todos los demonios y procesos posibles, para asegurarnos que nadie se dedica a escribir en disco.
Ahora es recomendable tener una segunda consola abierta con root contra la Raspberry y lanzar el comando "sync" que nos asegurará que todos los datos están escritos en la SD y podemos apagarla.
En otra consola lanzamos:
$ gzip -c 2019-07-10-raspbian-buster-lite.img | ssh root@192.168.1.9 "gunzip -c > /dev/mmcblk0"
Una vez acabe volvemos a la consola previa, "sync" y esperamos a que finalice.
Ya podemos apagar y volver a encenderla, si todo hay ido bien:
$ ssh pi@[IP]
password: raspberry
Linux raspberrypi 4.19.57+ #1244 Thu Jul 4 18:42:50 BST 2019 armv6l
Y aunque pueda parecer poco heterodoxo, ya lo tenemos listo.
febrero 26, 2018
postfix certificate key values mismatch
Recientemente durante la instalación de un nuevo certificado en un servidor postfix me sucedió el siguiente error:
$ telnet x.x.x.x 25 Escape character is '^]'. 220 x.x.x ESMTP Postfix > EHLO test 250-x.x.x 250-PIPELINING 250-SIZE 34044240 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250 SMTPUTF8 > STARTTLS 454 4.7.0 TLS not available due to local problem Connection closed by foreign host.En el log de postfix podemos ver la oscura razón:
postfix/smtpd[6376]: warning: cannot get RSA private key from file "/etc/postfix/smtpd.pem": disabling TLS support postfix/smtpd[6376]: warning: TLS library problem: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:340:Tras varias vueltas resulta que efectivamente los certificados que está mirando son distintos, el problema se encontraba en que habia puesto el certificado de las CA intermedias antes que el certificado del propio servidor. Aquí hay una guía muy completa sobre la instalación en postfix, reproduzco algunas partes:
openssl x509 -noout -modulus -in cert.pem | openssl md5 (stdin)= d467b8860d03aec22ad97eed3d77cac2
openssl rsa -noout -modulus -in key.pem | openssl md5 (stdin)= d467b8860d03aec22ad97eed3d77cac2Ambos modulos deberian coincidir, si no coinciden o nos hemos liados con los archivos o como yo hemos pegado el certificado incorrecto primero :)
marzo 25, 2017
Visual Studio Code indentation guides color
Primero activamos que se muestren las guias en settings.json:
// Controls whether the editor should render indent guides
"editor.renderIndentGuides": true,
Luego en el Color Theme que tengamos activo, editamos el color de la key: guide tal que así:
<plist version="1.0">
<dict>
<key>name</key>
<string>Monokai Yggdrasil</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>background</key>
<string>#23241F</string>
<!-- Color del cursor del editor -->
<key>caret</key><string>#FF0000</string>
<!-- Color de la guía del editor -->
<key>guide</key><string>#303030</string>
marzo 15, 2017
Script de migracion de Gnome Terminal para Ubuntu 16.04 LTS
La migración de Ubuntu siempre trae sorpresas, esta vez ha sido no poder recuperar la configuración del Gnome Terminal y que no haya ninguna herramienta que lo haga cuando es relativamente sencillo, han pasado de gconf (un sistema de configuración mediante archivos xml) a dconf (sistema de db por clave en bajo nivel).
El script lee un directorio con los xml viejos (normalmente en /home/user/.gconf/apps/gnome-terminal) y los instala en el nuevo sistema pasandole un dump de la nueva config en un formato que dconf entiende.
De paso permite también la alteración de uno o mas parámetros de todos los perfiles, que importamos o existentes al mismo tiempo.
https://github.com/fcosantos/gnome-terminal-migrate
El script lee un directorio con los xml viejos (normalmente en /home/user/.gconf/apps/gnome-terminal) y los instala en el nuevo sistema pasandole un dump de la nueva config en un formato que dconf entiende.
python gterminal_tool.py --load-current-profiles --skip-duplicate-names \
--load-gconf-profiles-from homefolder_backup/.gconf/apps/gnome-terminal \
--execute-delete --execute-action
De paso permite también la alteración de uno o mas parámetros de todos los perfiles, que importamos o existentes al mismo tiempo.
python gterminal_tool.py --load-current-profiles --set="font='Consolas 13'" \ --set="default-size-columns=170" --set="default-size-rows=50" \ --execute-delete --execute-actionEl código para descargar en github:
https://github.com/fcosantos/gnome-terminal-migrate
enero 28, 2017
diciembre 21, 2016
Felices fiestas
Con la llegada de estas fechas no puede uno menos que acordarse de todas esas personas que han estado este año ahí, al pie del cañón, mis mejores deseos para ellos, que se ven reflejados en este precioso christmas:
diciembre 03, 2016
El mundo vuelve a girar
Röyksopp feat. Robyn - Monument (The Inevitable End Version)
Arriba o abajo, dos caras de la misma moneda. Hoy toca tirar de nuevo.
diciembre 01, 2016
ESP8266 Mini D1 con sensor de presión barométrica GY-BMP280-3.3
Para montar nuestra propia estación meteorológica es fundamental tener un sensor de presión, he estado probando el GY-BMP280, un sensor que vale menos de 2€ comprándolo en cualquier página china.
Se trata de una pequeña placa que trae el sensor de Bosch y los pines para conexion I2C y SPI. Por comodidad, y uso de pines he probado el protocolo I2C montado en una placa MiniD1. Una de las cosas poco claras es el tema del pinout, a que pins debe conectarse en la MiniD1 la señal de reloj (SCL) y la de datos (SDA), urgando un poco en la documentación del código hardware/esp8266com/esp8266/ vemos las declaraciones de pines del chip ESP8266 a la placa MiniD1:
Por defecto la librería Wire de Arduino se reemplaza con la TwoWire que define begin con los pines SDA y SCL:
Estos por defecto están mapeados a D1 y D2 (4, 5) según la tabla de traducción anterior, en la documentación se explica más o menos:
Para testear los dispositivos i2c hay una libreria muy interesante, que scanea las direcciones en las que se pueden encontrar https://github.com/mcauser/i2cdetect . Con un poco de código el BMP280 aparece en la posición 0x76.
Trás esto debemos hacer un par de cambios al código de prueba de Adafruit_BMP280:
- Antes de nada definimos los pines en los que tenemos el I2C: Wire.begin(D3,D4);
- Indicamos la dirección del I2C:
Adafruit_BMP280 bme; // I2C
bme.begin(0x76)
Ya deberíamos poder ver los resultados del sensor por el puerto serie:
Temperature = 21.09 *C
Pressure = 100162.88 Pa
Approx altitude = 97.21 m
Si queremos un ejemplo completo en: http://lazyzero.de/en/elektronik/esp8266/diy_weather/start podemos ver un sensor de humedad, temperatura y este mismo de presión con su código completo.
Se trata de una pequeña placa que trae el sensor de Bosch y los pines para conexion I2C y SPI. Por comodidad, y uso de pines he probado el protocolo I2C montado en una placa MiniD1. Una de las cosas poco claras es el tema del pinout, a que pins debe conectarse en la MiniD1 la señal de reloj (SCL) y la de datos (SDA), urgando un poco en la documentación del código hardware/esp8266com/esp8266/ vemos las declaraciones de pines del chip ESP8266 a la placa MiniD1:
#########################################################################
# variants/d1_mini/pins_arduino.h
#########################################################################
#define PIN_WIRE_SDA (4) // D2
#define PIN_WIRE_SCL (5) // D1
static const uint8_t SDA = PIN_WIRE_SDA;
static const uint8_t SCL = PIN_WIRE_SCL;
static const uint8_t LED_BUILTIN = 2;
static const uint8_t BUILTIN_LED = 2;
static const uint8_t D0 = 16;
static const uint8_t D1 = 5;
static const uint8_t D2 = 4;
static const uint8_t D3 = 0;
static const uint8_t D4 = 2;
static const uint8_t D5 = 14;
static const uint8_t D6 = 12;
static const uint8_t D7 = 13;
static const uint8_t D8 = 15;
static const uint8_t RX = 3;
static const uint8_t TX = 1;
Por defecto la librería Wire de Arduino se reemplaza con la TwoWire que define begin con los pines SDA y SCL:
#########################################################################
# ~/Arduino/hardware/esp8266com/esp8266/libraries/Wire/Wire.cpp
#########################################################################
static int default_sda_pin = SDA;
static int default_scl_pin = SCL;
// Constructors ////////////////////////////////////////////////////////////////
TwoWire::TwoWire(){}
// Public Methods //////////////////////////////////////////////////////////////
void TwoWire::begin(int sda, int scl){
default_sda_pin = sda;
default_scl_pin = scl;
twi_init(sda, scl);
flush();
}
Estos por defecto están mapeados a D1 y D2 (4, 5) según la tabla de traducción anterior, en la documentación se explica más o menos:
#########################################################################
~/Arduino/hardware/esp8266com/esp8266$ vi doc/libraries.md
## I2C (Wire library)
Wire library currently supports master mode up to approximately 450KHz.
Before using I2C, pins for SDA and SCL need to be set by calling
`Wire.begin(int sda, int scl)`, i.e. `Wire.begin(0, 2)` on ESP-01,
else they default to pins 4(SDA) and 5(SCL).
#########################################################################
Para testear los dispositivos i2c hay una libreria muy interesante, que scanea las direcciones en las que se pueden encontrar https://github.com/mcauser/i2cdetect . Con un poco de código el BMP280 aparece en la posición 0x76.
#########################################################################
#include
#include
void setup() {
Wire.begin(0, 2); -> D3,D4
//Wire.begin();
Serial.begin(9600);
Serial.println("i2cdetect example\n");
Serial.print("Scanning address range 0x03-0x77\n\n");
}
void loop() {
i2cdetect(); // default range from 0x03 to 0x77
delay(2000);
}
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- 76 --
############################################################################
Trás esto debemos hacer un par de cambios al código de prueba de Adafruit_BMP280:
- Antes de nada definimos los pines en los que tenemos el I2C: Wire.begin(D3,D4);
- Indicamos la dirección del I2C:
Adafruit_BMP280 bme; // I2C
bme.begin(0x76)
Ya deberíamos poder ver los resultados del sensor por el puerto serie:
Temperature = 21.09 *C
Pressure = 100162.88 Pa
Approx altitude = 97.21 m
Si queremos un ejemplo completo en: http://lazyzero.de/en/elektronik/esp8266/diy_weather/start podemos ver un sensor de humedad, temperatura y este mismo de presión con su código completo.
octubre 30, 2016
Convertir Matroska video to MP4 para televisiones Samsung
Hoy en día las televisiones soportan un amplio rango de formatos y casi todos se pueden emitir desde un servidor de videos sin problemas (Universal Media Server por ejemplo). Aunque de vez en cuando nos encontramos con el típico formato que falla o nuestra tele carece de software para reproducirlo. En estos casos tenemos dos opciones, configurar nuestro servidor para que realice la conversión al vuelo o reconvertirlos nosotros mismos, vamos a explorar esta opción con un software muy común como el VLC:
Abrimos el VLC y elegimos convertir/guardar:
Añadimos el archivo que queremos convertir:
Cliqueamos convertir y editamos el perfil:
Para la encapsulación MP4/MOV:
En principio no hará falta convertir el video, pero si quisieramos un formato bastante compatible es H264.
Para el audio en caso de no poder mantener el original una buena opción es el más básico:
Ya solo queda guardar el nuevo archivo, en caso de que haya conversión de formato de por medio será un poco mas lento:
abril 21, 2016
abril 06, 2015
IO error montando raid
En este caso md3 se trata de un raid 1 que no es capaz de montar por errores en el segundo disco, lanzando los siguientes comandos observamos los siguientes errores:
# mount /dev/md3 /mnt/home/
mount: wrong fs type, bad option, bad superblock on /dev/md3,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
# smartctl -a /dev/sdb SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 077 077 016 Pre-fail Always - 11928801 2 Throughput_Performance 0x0005 139 139 054 Pre-fail Offline - 70 3 Spin_Up_Time 0x0007 131 131 024 Pre-fail Always - 282 (Average 294) 4 Start_Stop_Count 0x0012 100 100 000 Old_age Always - 22 5 Reallocated_Sector_Ct 0x0033 001 001 005 Pre-fail Always FAILING_NOW 639 7 Seek_Error_Rate 0x000b 099 099 067 Pre-fail Always - 1 8 Seek_Time_Performance 0x0005 124 124 020 Pre-fail Offline - 33 9 Power_On_Hours 0x0012 099 099 000 Old_age Always - 13406 10 Spin_Retry_Count 0x0013 100 100 060 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 22 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 35 193 Load_Cycle_Count 0x0012 100 100 000 Old_age Always - 35 194 Temperature_Celsius 0x0002 187 187 000 Old_age Always - 32 (Min/Max 24/44) 196 Reallocated_Event_Count 0x0032 024 024 000 Old_age Always - 1528 197 Current_Pending_Sector 0x0022 001 001 000 Old_age Always - 11248 198 Offline_Uncorrectable 0x0008 100 100 000 Old_age Offline - 28 199 UDMA_CRC_Error_Count 0x000a 200 200 000 Old_age Always - 0
# dmesg
ata2.00: exception Emask 0x0 SAct 0x7fe0001f SErr 0x0 action 0x0
ata2.00: irq_stat 0x40000008
ata2.00: failed command: READ FPDMA QUEUED
ata2.00: cmd 60/08:a8:e8:0c:b7/00:00:9f:00:00/40 tag 21 ncq 4096 in
res 51/40:08:e8:0c:b7/00:00:9f:00:00/40 Emask 0x409 (media error)
ata2.00: status: { DRDY ERR }
ata2.00: error: { UNC }
ata2.00: configured for UDMA/133
sd 1:0:0:0: [sdb] Unhandled sense code
sd 1:0:0:0: [sdb]
Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
sd 1:0:0:0: [sdb]
Sense Key : Medium Error [current] [descriptor]
Descriptor sense data with sense descriptors (in hex):
72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
9f b7 0c e8
sd 1:0:0:0: [sdb]
Add. Sense: Unrecovered read error - auto reallocate failed
sd 1:0:0:0: [sdb] CDB:
Read(10): 28 00 9f b7 0c e8 00 00 08 00
end_request: I/O error, dev sdb, sector 2679573736
ata2: EH complete
El problema se debe a que está intentando escribir el journal que tenía pendiente, la solución es montarlo sin que lo escriba, perderemos los últimos datos pero posiblemente tengamos acceso a gran parte del disco.# mount -o ro,noload /dev/md3 /mnt/home/
junio 09, 2012
60 seconds for Mr. Light
Un poquito de electronica....
abril 13, 2012
Cambiar los puertos de escucha de nessus 5
Para cambiar los puertos en los que escucha nessus podemos hacerlo bien autenticandonos en el interfaz web:
O bien a través de la consola mediante los siguientes comandos:
Para modificar el puerto de la consola web:
O bien a través de la consola mediante los siguientes comandos:
Para modificar el puerto de la consola web:
/opt/nessus/sbin/nessus-fix --set xmlrpc_listen_port=PUERTOPara modificar el puerto del antiguo protocolo NTP:
/opt/nessus/sbin/nessus-fix --set listen_port=PUERTODespués:
/etc/init.d/nessusd stop /etc/init.d/nessusd start
abril 12, 2012
Corrupción de tablas GPT
Últimamente los Ubuntu suelen instalar por defecto el tipo de tabla de particiones GPT, un estándar basado en EFI que reemplaza el viejo MBR.
Hemos tenido un problema con la corrupción (aparente) de una de estas tablas, grub dejó de tener acceso a su partición y por tanto de arrancar el sistema, tras muchas vueltas una de las soluciones ha sido reescribir la tabla de particiones, para ello arrancando desde un livecd:
livecd ~ # parted /dev/sda (parted) p Warning: /dev/sda contains GPT signatures, indicating that it has a GPT table. However, it does not have a valid fake msdos partition table, as it should. Perhaps it was corrupted -- possibly by a program that doesn't understand GPT partition tables. Or perhaps you deleted the GPT table, and are now using an msdos partition table. Is this a GPT partition table? Yes/No? yes Model: ATA ST2000DL003-9VT1 (scsi) Disk /dev/sda: 2000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 1018kB 1000kB bios_grub 2 1018kB 257MB 256MB ext2 3 257MB 2000GB 2000GB lvmComo vemos nos avisa de que a pesar de que hay firmas GPT algo raro ha pasado, posiblemente esté leyendo la tabla de backup. Como aun tenemos toda la información con realizar un pequeño cambio para que se sobreescriba será suficiente:
(parted) set Warning: /dev/sda contains GPT signatures, indicating that it has a GPT table. However, it does not have a valid fake msdos partition table, as it should. Perhaps it was corrupted -- possibly by a program that doesn't understand GPT partition tables. Or perhaps you deleted the GPT table, and are now using an msdos partition table. Is this a GPT partition table? Yes/No? yes Partition number? 1 Flag to Invert? bios_grub New state? on/[off]? onVolviendo a rearrancar el parted:
livecd ~ # parted /dev/sda GNU Parted 3.0 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) p Model: ATA ST2000DL003-9VT1 (scsi) Disk /dev/sda: 2000GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 17.4kB 1018kB 1000kB bios_grub 2 1018kB 257MB 256MB ext2 3 257MB 2000GB 2000GB lvm (parted) q livecd ~ # vgscan Reading all physical volumes. This may take a while... Found volume group "XXX" using metadata type lvm2Ahora ya tenemos acceso a la partición donde teníamos el lvm, igualmente grub ya puede localizar de nuevo su referencia y arrancar el sistema correctamente.
febrero 15, 2012
Referencia cruzada en Django
Django está diseñado para nuestra comodidad, si bien algunas veces se hace dificil encontrar exactamente lo que necesitamos, este es el caso de las referencias cruzadas:
En el caso de tener un campo ForeignKey o ManyToManyField existen ocasiones en que queremos seguir esta relación para obtener los campos relacionados de la otra, un ejemplo que me ha sucedido recientemente es que al hacer uso del objeto de paginacion (Paginator) si quieres obtener las referencias necesitas realizar otra consulta (en un bucle for por ejemplo) con el objeto final que quieres mostrar, esto provocaba que la optimización del paginator (solo se trae los registros a mostrar) se fuera a paseo obligando a procesar toda la tabla y hacer n bucles mas con la tabla que nos interesa. Esto se resuelve haciendo uso del objeto referencia RelatedManager.
Imaginando que tenemos un objeto llamado cesto y un objeto llamado peras que tiene como foreingkey un cesto si queremos localizar las peras del cesto de esta forma llamariamos a pera.cesto_set.all()
Esto es muy útil pues podemos delegar esta parte de la lógica en la plantilla consiguiendo una aplicación bastante mínima:
En el caso de tener un campo ForeignKey o ManyToManyField existen ocasiones en que queremos seguir esta relación para obtener los campos relacionados de la otra, un ejemplo que me ha sucedido recientemente es que al hacer uso del objeto de paginacion (Paginator) si quieres obtener las referencias necesitas realizar otra consulta (en un bucle for por ejemplo) con el objeto final que quieres mostrar, esto provocaba que la optimización del paginator (solo se trae los registros a mostrar) se fuera a paseo obligando a procesar toda la tabla y hacer n bucles mas con la tabla que nos interesa. Esto se resuelve haciendo uso del objeto referencia RelatedManager.
Imaginando que tenemos un objeto llamado cesto y un objeto llamado peras que tiene como foreingkey un cesto si queremos localizar las peras del cesto de esta forma llamariamos a pera.cesto_set.all()
Esto es muy útil pues podemos delegar esta parte de la lógica en la plantilla consiguiendo una aplicación bastante mínima:
{% for pera in peras %}
{{ pera.tipo }}
{% for cesto in pera.cesto_set.all %}
{{ cesto.nombre }}
{% endfor %}
{% endfor %}
diciembre 16, 2011
Compilar SQUID 2.7 en Ubuntu 10.10 con OpenSSL 1.0.0
En la nueva rama de OpenSSL 1.0.0 el soporte para SSL v2 ha sido eliminado, SSLv2 es un protocolo obsoleto que contiene múltiples fallos de seguridad que son fácilmente explotables, por tanto su uso debe ser evitado.
El problema ocurre cuando queremos compilar programas con versiones antiguas que hacen en su código uso de este protocolo, este es el caso de querer compilar desde código SQUID2.7 sobre una Ubuntu 10.10, obtendremos un error similar a:
La solución pasa por parchear el código o eliminar las partes que requieren de funciones sslv2 tal como se puede observar en el siguiente patch
Para aplicarlo podemos copiar el contenido anterior en un archivo y ejecutar: patch -p0 < parche.txt
El problema ocurre cuando queremos compilar programas con versiones antiguas que hacen en su código uso de este protocolo, este es el caso de querer compilar desde código SQUID2.7 sobre una Ubuntu 10.10, obtendremos un error similar a:
ssl_support.o: In function `sslCreateServerContext': /usr/src/proxy/squid-2.7.STABLE9/src/ssl_support.c:451: undefined reference to `SSLv2_server_method' ssl_support.o: In function `sslCreateClientContext': /usr/src/proxy/squid-2.7.STABLE9/src/ssl_support.c:614: undefined reference to `SSLv2_client_method' collect2: ld returned 1 exit status
La solución pasa por parchear el código o eliminar las partes que requieren de funciones sslv2 tal como se puede observar en el siguiente patch
--- /usr/src/proxy/squid-2.7.STABLE9/src/ssl_support.c.orig 2011-12-16 12:54:54.000000000 +0100
+++ /usr/src/proxy/squid-2.7.STABLE9/src/ssl_support.c 2011-12-16 12:55:15.000000000 +0100
@@ -446,10 +446,12 @@
ERR_clear_error();
debug(83, 1) ("Initialising SSL.\n");
switch (version) {
+#ifndef OPENSSL_NO_SSL2
case 2:
debug(83, 5) ("Using SSLv2.\n");
method = SSLv2_server_method();
break;
+#endif
case 3:
debug(83, 5) ("Using SSLv3.\n");
method = SSLv3_server_method();
@@ -609,10 +611,12 @@
ERR_clear_error();
debug(83, 1) ("Initialising SSL.\n");
switch (version) {
+#ifndef OPENSSL_NO_SSL2
case 2:
debug(83, 5) ("Using SSLv2.\n");
method = SSLv2_client_method();
break;
+#endif
case 3:
debug(83, 5) ("Using SSLv3.\n");
method = SSLv3_client_method();
Para aplicarlo podemos copiar el contenido anterior en un archivo y ejecutar: patch -p0 < parche.txt
noviembre 27, 2011
octubre 26, 2011
Deshabilitar ipv6 en ubuntu 11.10 GNU/Linux 3.0.0
Parece que en los ultimos kernel algo ha cambiado que ya no es posible deshabilitar el soporte IP v6 a través de los métodos tradicionales, vease:
- Método 1, NO FUNCIONA. Añadir la configuración al núcleo (supuestamente funcional en Ubuntu 10.04 y 10.10):
vi /etc/sysctl.conf # IPv6 net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
Recargamos la configuración y vemos si está aplicada con:sysctl -p cat /proc/sys/net/ipv6/conf/all/disable_ipv6
- Método 2. NO FUNCIONA. Deshabilitar los módulos (supuestamente funcional en Ubuntu 9.04 y anteriores):
vi /etc/modprobe.d/aliases alias net-pf-10 ipv6 off alias net-pf-10 off alias ipv6 off
Reiniciamosreboot
- Método 3. FUNCIONA Como posiblemente todo esto no nos haya funcionado:
vi /etc/default/grub << GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" >> GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash ipv6.disable=1”
Recargamos la configuración del grub y reiniciamos:update-grub reboot
octubre 14, 2011
Backup y recuperación del MBR y tabla de particiones
Backup a un archivo del mbr, particiones y lista legible:
dd if=/dev/sda of=sda.mbr bs=512 count=1 fdisk -l > particiones.txtRecuperación a disco:
dd if=sda.mbr of=/dev/sda bs=512 count=1
Suscribirse a:
Entradas (Atom)








