4 de septiembre de 2024

Configuarar HTTPS en apache2 con certificado autofirmado

Configurar Apache2 para usar HTTPS con un certificado autofirmado es un proceso relativamente sencillo. A continuación te guiaré paso a paso en cómo hacerlo en un sistema Linux, como Ubuntu o Debian.



### Paso 1: Instalar Apache2
Si no tienes Apache2 instalado, puedes hacerlo ejecutando el siguiente comando:

```bash
sudo apt update
sudo apt install apache2
```

### Paso 2: Habilitar el módulo SSL de Apache
Apache tiene un módulo para manejar conexiones SSL llamado `mod_ssl`. Para habilitarlo, ejecuta:

```bash
sudo a2enmod ssl
```

### Paso 3: Crear un certificado SSL autofirmado
Ahora vamos a crear un certificado autofirmado y una clave privada. Por defecto, el certificado SSL se genera para 365 días. Si deseas un período diferente, puedes cambiar el valor después de `-days`.

```bash
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache-selfsigned.key -out /etc/apache2/ssl/apache-selfsigned.crt
```

Este comando hará lo siguiente:
- `-x509`: Indica que vamos a crear un certificado autofirmado.
- `-nodes`: No ciframos el archivo de clave privada.
- `-days 365`: El certificado será válido por 365 días.
- `-newkey rsa:2048`: Generamos una clave RSA de 2048 bits.
- `-keyout`: El archivo donde se almacenará la clave privada.
- `-out`: El archivo donde se almacenará el certificado.

Durante la generación del certificado, te pedirá información como el nombre del país, ciudad, organización, etc. Puedes completar estos campos o dejarlos en blanco.

### Paso 4: Configurar Apache para usar SSL
Ahora necesitamos configurar Apache para utilizar el certificado autofirmado. Vamos a modificar el archivo de configuración SSL predeterminado.

1. Abre el archivo de configuración de SSL para editarlo:

   ```bash
   sudo nano /etc/apache2/sites-available/default-ssl.conf
   ```

2. Busca las siguientes líneas y asegúrate de que apunten a los archivos de certificado y clave privada que acabas de crear:

   ```bash
   SSLCertificateFile /etc/apache2/ssl/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/apache2/ssl/apache-selfsigned.key
   ```

3. Si deseas, puedes modificar otras configuraciones en este archivo para adaptarlas a tus necesidades, como el nombre del servidor (`ServerName`).

### Paso 5: Habilitar el sitio SSL
Con el archivo configurado, habilitamos el sitio SSL predeterminado con el siguiente comando:

```bash
sudo a2ensite default-ssl.conf
```

### Paso 6: Reiniciar Apache
Para aplicar los cambios, reinicia Apache:

```bash
sudo systemctl restart apache2
```

### Paso 7: Prueba la configuración
Ahora deberías poder acceder a tu servidor Apache a través de HTTPS. Abre un navegador y visita `https://<tu-dominio>` o `https://<tu-dirección-ip>`. Dado que estás utilizando un certificado autofirmado, el navegador mostrará una advertencia de seguridad. Puedes omitir esta advertencia para continuar.

### Opcional: Redirigir HTTP a HTTPS
Si deseas redirigir todo el tráfico HTTP a HTTPS, puedes añadir una redirección en el archivo de configuración de tu sitio principal. Abre el archivo de configuración de tu sitio en `/etc/apache2/sites-available/000-default.conf` y añade lo siguiente dentro del bloque `<VirtualHost *:80>`:

```apache
<VirtualHost *:80>
    ServerName tu-dominio.com
    Redirect / https://tu-dominio.com/
</VirtualHost>
```

Luego, reinicia Apache nuevamente:

```bash
sudo systemctl restart apache2
```

### Conclusión

Ahora has configurado Apache2 para usar HTTPS con un certificado SSL autofirmado. Aunque este tipo de certificados son útiles para pruebas y entornos de desarrollo, para producción es recomendable usar un certificado emitido por una Autoridad de Certificación (CA), como los proporcionados por Let's Encrypt.

data from GPT-4 of OpenAI.
(I) Prompt: Como configurar apache2 con https usando certificado autofrmado.
(II) Image prompt: An illustration showing the process of configuring HTTPS on an Apache2 server using a self-signed certificate. The image should depict a server terminal with Apache2 logo, SSL keys being generated, and a certificate being configured. Include visual elements like a shield icon representing security (HTTPS), command-line code snippets, and a simplified server diagram with arrows indicating data flow over HTTPS. The overall tone should be technical yet approachable, with clear, organized elements representing each step in the setup process.

20 de mayo de 2023

Solventar Error de Firmas con aptitude update

Cuando aparace un error de verificación de firmas públicas al actualizar los paquetes linux-mint con aptitude, como el ejemplo:

#aptitude update
...
...
Err https://repo.protonvpn.com/debian unstable InRelease      
  Las firmas siguientes no se pudieron verificar porque su clave pública no está disponible: NO_PUBKEY YourKeyHere
...

Solución:

#apt-key adv --keyserver keyserver.ubuntu.com --recv-keys YourKeyHere

Executing: /tmp/apt-key-gpghome.czzxh7ycXx/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys YourKeyHere
gpg: clave YourKeyHere: clave pública "Proton Technologies AG <opensource@proton.me>" importada
gpg: Cantidad total procesada: 1
gpg:               importadas: 1 

Ref:
https://chat.openai.com
http://misnotaslinux.blogspot.com/2011/03/error-de-gpg-nopubkey.html

 

21 de marzo de 2023

Montar una imagen de tarjeta SD de rpi en linux

1) Descomprimir el fichero SDrpi.img.gz manteniendo el original:

# gzip -dk SDrpi.img.gz

 

2) ver estructura del fichero imagen:

# fdisk -l SDrpi.img

Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0xb111a06d

Dispositivo Inicio Comienzo  Final Sectores Tamaño Id Tipo

SDrpi.img1            8192    93814    85623  41,8M  c W95 FAT32 (LBA)
SDrpi.img2           94208 62333951 62239744  29,7G 83 Linux 

 

3) Montar la partición 2 en /mnt/tmp:

Calcular valor del offset:

# echo "512 * 94208" | bc
48234496

# mount -o loop,offset=48234496 SDrpi.img /mnt/tmp

 

4) Comprobar:

$ cd /mnt/tmp

$ ll
total 104K
drwxr-xr-x   2 root root 4,0K sep 11  2019 bin
drwxr-xr-x   2 root root 4,0K sep  7  2017 boot
drwxr-xr-x   4 root root 4,0K sep  7  2017 dev
drwxr-xr-x 123 root root  12K nov  6  2019 etc
drwxr-xr-x   4 root root 4,0K ene  8  2019 home
drwxr-xr-x  16 root root 4,0K feb 20  2019 lib
drwx------   2 root root  16K sep  7  2017 lost+found
drwxr-xr-x   4 root root 4,0K sep 26  2017 media
drwxr-xr-x   3 root root 4,0K oct 24  2017 mnt
drwxr-xr-x   5 root root 4,0K feb  3  2019 opt
drwxr-xr-x   2 root root 4,0K jul 28  2017 proc
drwx------  24 root root 4,0K nov 22  2019 root
drwxr-xr-x   6 root root 4,0K sep  7  2017 run
drwxr-xr-x   2 root root  12K oct  2  2019 sbin
drwxr-xr-x   2 root root 4,0K sep  7  2017 srv
drwxr-xr-x   2 root root 4,0K jul 28  2017 sys
drwxrwxrwt   8 root root 4,0K nov 22  2019 tmp
drwxr-xr-x  11 root root 4,0K sep  7  2017 usr
drwxr-xr-x  12 root root 4,0K oct 14  2017 var

Ok, ya tenemos accesible el sistema de archivos de la images de la tarjeta SD de raspberry pi, disponible para consultar o tomar los que necesitemos.

 

5) desmontar al terminar:

# sudo umount /mnt/tmp




8 de marzo de 2023

Rpi test SD card speed with hdparm

 $ hdparm -tT /dev/mmcblk0 

------------------------------------------------------------ 

@rpi4:~ $ sudo hdparm -tT /dev/sdd  (16GB class 4 SD by USB reader)
/dev/sdd:
 Timing cached reads:   1404 MB in  2.00 seconds = 702.06 MB/sec
 Timing buffered disk reads:  58 MB in  3.05 seconds =  19.03 MB/sec

------------------------------------------------------------ 

@rpi4:~ $ sudo hdparm -tT /dev/mmcblk0 (128GB SD, class 10)
/dev/mmcblk0:
 Timing cached reads:   1470 MB in  2.00 seconds = 735.12 MB/sec
 Timing buffered disk reads: 128 MB in  3.02 seconds =  42.42 MB/sec

------------------------------------------------------------ 

@rpiap:~ $ sudo hdparm -tT /dev/mmcblk0 (16GB SD Class 10)
/dev/mmcblk0:
 Timing cached reads:   874 MB in  2.00 seconds = 437.44 MB/sec
 Timing buffered disk reads:  66 MB in  3.02 seconds =  21.86 MB/sec

------------------------------------------------------------

@rpi:~ $ sudo hdparm -tT /dev/mmcblk0 (32 GB SD class 10)
/dev/mmcblk0:
 Timing cached reads:   410 MB in  2.01 seconds = 204.42 MB/sec
 Timing buffered disk reads:  66 MB in  3.04 seconds =  21.70 MB/sec

------------------------------------------------------------ 

2 de marzo de 2023

Acivate event_scheduler in mariaDB

Protocol:


1) Edit mariadb config file:


# nano /etc/mysql/mariadb.conf.d/50-server.cnf

include the line: "event_sheduler = on"

2) Restart mariadb service:


# service mariadb restart

3) Check if allright:

$ service mariadb status 

 

Confirm that events are executed from now.

28 de febrero de 2023

How to Compile and Upload .ino file to Arduino board in Rpi Linux Shell


I have a system composed by RpiB+ and Arduino Uno board working together, monitoring parameters, triggering reles, storing data into MariaDB and presenting with apache2 webserver.

When I have to change arduino program I have to open vnc session, execute arduino-ide, edit sketch, compile and upload to arduino board !!, ... painful due limited resources o my old RpiB+.

Thus, can I compile and upload and .ino file from rpi linux shell ??

Yes, and very ease.

 

Protocol:

Install arduino, if not installed already:

# aptitude install arduino

Compile and upload Shell command:

$ arduino --upload yourfile.ino --port yourArduinoport

 

Example:

$ arduino --upload example.ino --port /dev/ttyACM0

Picked up JAVA_TOOL_OPTIONS:
Cargando configuración...
Inicializando paquetes...
Preparando tarjetas...
Verficando...
...
El Sketch usa 16464 bytes (51%) del espacio de almacenamiento de programa. El máximo es 32256 bytes.
Las variables Globales usan 754 bytes (36%) de la memoria dinámica, dejando 1294 bytes para las variables locales. El máximo es 2048 bytes.
Subiendo...
...

I can also modify the .ino sketches with nano, compile and upload them to arduino from shell, without need any graphical environment.

Ref.:
https://arduino.stackexchange.com/questions/15893/how-to-compile-upload-and-monitor-via-the-linux-command-line

27 de febrero de 2023

Overlay Rpi Firmware: disable Wifi, Bluetooth and easy Shutdown Button

Rpi's Firmware has many posibilities to configure changing /boot/config.txt file


Usefull overlays:

Disable bluetooth:

Name: disable-bt
Info: Disable onboard Bluetooth on Pi 3B, 3B+, 3A+, 4B and Zero W, restoring
UART0/ttyAMA0 over GPIOs 14 & 15.
N.B. To disable the systemd service that initialises the modem so it
doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load: dtoverlay=disable-bt
Params: <None>

Disable wifi:

Name: disable-wifi
Info: Disable onboard WLAN on Pi 3B, 3B+, 3A+, 4B and Zero W.
Load: dtoverlay=disable-wifi
Params: <None>


Safe shutdown button:

Clinton

Hey Shane,
No this won’t but if you wire the button to GPIO3 and add
dtoverlay=gpio-shutdown
to /boot/config.txt it will give you a safe shutdown and start up again.

You can find out more about it in the overlay readme search for shutdown and you will find it.
@Josh Told me about this just after I finished writing the tutorial.

-----------------------------------------------------------

Tested in my Rpi4: NOT WORK !!!

other recipe:

Tentsing this:

Include in /boot/config.txt and reboot

dtoverlay=gpio-shutdown,gpio_pin=3

NOT WORK !!

seems that nt work with GPIO_3 = SCL

Changing to GPI #17

===================================================

Include into /boot/config.txt and reboot

dtoverlay=gpio-shutdown,gpio_pin=17

YES, it's WORKS, can shutdown rpi4 with switch from GPIO#17 -- GND

===================================================


Ref:

https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README

26 de febrero de 2023

Linux shell Upgrade from RpiOS-10 buster to RpiOS-11 bullseye, fast recipe.

Protocol:

 0 - Make rpi SD backup in other linux computer:
# dd if=/dev/mmcblk0 status=progress bs=5M | gzip -9 > rpi-sd-bck-$(date +%Y%m%d_%H%M%S).img.gz
 

1 - Check current version: 
$ lsb_release -a
 
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

 
2- Update, Upgrade current version
# aptitude update
# aptitude upgrade -y
# aptitude dist-upgrade -y
 
3 - Update Rpi firmware (?)
# rpi-update
 
4 - Change sourceslist.list file: "buster" to "bullseye"
# nano /etc/apt/sources.list
 
old: 
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
new:
deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi

5 - Update & Upgrade new OS version
# aptitude update
# aptitude upgrade -y

6 - Clean installation files
# aptitude autoclean
 
7 - Reboot the system
# reboot
 
8 - Check OS
$ lsb_release -a
 or
$ neofetch
  `.::///+:/-.        --///+//-:``    pi@rpi4 
`+oooooooooooo:   `+oooooooooooo:    -------  
 /oooo++//ooooo:  ooooo+//+ooooo.    OS: Raspbian GNU/Linux 11 (bullseye) armv7l  
 `+ooooooo:-:oo-  +o+::/ooooooo:     Host: Raspberry Pi 4 Model B Rev 1.4  
  `:oooooooo+``    `.oooooooo+-      Kernel: 5.10.103-v7l+  
    `:++ooo/.        :+ooo+/.`       Uptime: 13787B year 
       ...`  `.----.` ``..           Packages: 2098 (dpkg)  
    .::::-``:::::::::.`-:::-`        Shell: bash 5.1.4  
   -:::-`   .:::::::-`  `-:::-       Resolution: 3840x2160  
  `::.  `.--.`  `` `.---.``.::`      Terminal: /dev/pts/0  
      .::::::::`  -::::::::` `       CPU: BCM2711 (4) @ 1.500GHz  
.::` .:::::::::- `::::::::::``::.    Memory: 367MiB / 7847MiB  
-:::` ::::::::::.  ::::::::::.`:::-
::::  -::::::::.   `-::::::::  ::::                            
-::-   .-:::-.``....``.-::-.   -::-
.. ``       .::::::::.     `..`..
  -:::-`   -::::::::::`  .:::::`
  :::::::` -::::::::::` :::::::.
  .:::::::  -::::::::. ::::::::
   `-:::::`   ..--.`   ::::::.
     `...`  `...--..`  `...`
           .::::::::::
            `.-::::-`


9 - Check all your Rpi system.

bye.

24 de febrero de 2023

Hacer funcionar arduino-IDE en Raspberry Pi B+ con OS 11 y Java 11

Me ha dejado de funcionar arduino-IDE en rpiB+ con Raspberry Pi OS 11.

Desde la consola aparece un error:

$ /usr/bin/arduino
Picked up JAVA_TOOL_OPTIONS:  
Error occurred during initialization of VM
Server VM is only supported on ARMv7+ VFP

De modo que parece que hay un problema con java

$ java -version
Error occurred during initialization of VM
Server VM is only supported on ARMv7+ VFP

Pues is, confirmado no funciona java.

El procesador de mi máquina es ARMv6:

$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 697.95
Features        : half thumb fastmult vfp edsp java tls  
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2835
Revision        : 0010
Serial          : 00000000ae3e152f
Model           : Raspberry Pi Model B Plus Rev 1.2


Solución:

from: https://stackoverflow.com/questions/61175441/error-occurred-during-initialization-of-vm-server-vm-is-only-supported-on-armv7

Si el procesador es ARMv6 hay que sustituir java:

$ cd /usr/lib/jvm

$ sudo wget https://cdn.azul.com/zulu-embedded/bin/zulu11.41.75-ca-jdk11.0.8-linux_aarch32hf.tar.gz

$ sudo tar -xzvf zulu11.41.75-ca-jdk11.0.8-linux_aarch32hf.tar.gz

$ sudo rm zulu11.41.75-ca-jdk11.0.8-linux_aarch32hf.tar.gz

Actualizar alternatives:


$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/zulu11.41.75-ca-jdk11.0.8-linux_aarch32hf/bin/java 1 $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/zulu11.41.75-ca-jdk11.0.8-linux_aarch32hf/bin/javac 1

Ahora seleccionar el nuevo java instalado:


$ sudo update-alternatives --config java
           [revisa y selecciona la nueva version instalada, en mi caso es el 2 ] 
$ sudo update-alternatives --config javac

Comprueba la nueva versión de java:

$ java -version
openjdk version "11.0.8" 2020-07-14 LTS
OpenJDK Runtime Environment Zulu11.41+75-CA (build 11.0.8+10-LTS) OpenJDK Client VM Zulu11.41+75-CA (build 11.0.8+10-LTS, mixed mode)

Ok!!! parece que funciona.

Pruebo si funciona arduino IDE:
Ok! funciona.