Quick and dirty : aws tag reserved instances

aws ec2 describe-reserved-instances
{
    "ReservedInstances": [
        {
            "Duration": 57024000,
            "End": "2026-02-12T16:11:46+00:00",
            "FixedPrice": 0.0,
            "InstanceCount": 3,
            "InstanceType": "r5a.xlarge",
            "ProductDescription": "Linux/UNIX",
            "ReservedInstancesId": "c5851026-2b6f-4d5c-99ba-946146221ac0",
            "Start": "2024-04-23T16:11:47.169000+00:00",
            "State": "active",
            "UsagePrice": 0.0,
            "CurrencyCode": "USD",
            "InstanceTenancy": "default",
            "OfferingClass": "standard",
            "OfferingType": "No Upfront",
            "RecurringCharges": [
                {
                    "Amount": 0.099,
                    "Frequency": "Hourly"
                }
            ],
            "Scope": "Region"
        }
    ]
}

aws ec2 create-tags --resources c5851026-2b6f-4d5c-99ba-946146221ac0 --tags Key=project,Value=200029

aws ec2 describe-reserved-instances                                                                 
{
    "ReservedInstances": [
        {
            "Duration": 57024000,
            "End": "2026-02-12T16:11:46+00:00",
            "FixedPrice": 0.0,
            "InstanceCount": 3,
            "InstanceType": "r5a.xlarge",
            "ProductDescription": "Linux/UNIX",
            "ReservedInstancesId": "c5851026-2b6f-4d5c-99ba-946146221ac0",
            "Start": "2024-04-23T16:11:47.169000+00:00",
            "State": "active",
            "UsagePrice": 0.0,
            "CurrencyCode": "USD",
            "InstanceTenancy": "default",
            "OfferingClass": "standard",
            "OfferingType": "No Upfront",
            "RecurringCharges": [
                {
                    "Amount": 0.099,
                    "Frequency": "Hourly"
                }
            ],
            "Scope": "Region",
            "Tags": [
                {
                    "Key": "project",
                    "Value": "200029"
                }
            ]
        }
    ]
}

Magari esisterà anche un altro modo, ma questo ha funzionato subito taggando le risorse

Piwigo e docker

Sto per cambiare radicalmente la configurazione della mia infrastruttura e la cosa che mi interessava era quella di poter ancora depositare su qualche parte le foto del rugby / harpastum che realizzo per i figli e, siccome l’appetito vien mangiando e non volendo installare effettivamente i pacchetti ho pensato di vedere se e come con docker si potesse fare.

Ho seguito le indicazioni in rete ed ho generato il seguente docker-composer.yml


services:
mysql-server-80:
image: mysql/mysql-server:8.0
volumes:
- /home/dockeruser/docker-piwigo/mysql/:/var/lib/mysql/
ports:
- "3306:3306"
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: piwigo
MYSQL_USER: utente
MYSQL_PASSWORD: password
piwigo:
image: lscr.io/linuxserver/piwigo:latest
container_name: piwigo
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Rome
volumes:
- /home/dockeruser/docker-piwigo/config:/config
- /home/dockeruser/docker-piwigo/gallery:/gallery
ports:
- 80:80
restart: unless-stopped
depends_on:
- mysql-server-80

La parte complicata è stata l’individuazione del nome della macchina che esponeva il servizio di mysql: all’inzio pensavo che fosse mysql-server-80, ma mi sono ricreduto quyando ho visto i nomi dei conainer presenti sulla rete di pwigo

docker network ls

riporta

274d82b58ef7 docker-piwigo_default bridge local

e poi con

docker network inspect docker-piwigo_default

ho avuto la conferma che il nome non era quello:

[
    {
        "Name": "docker-piwigo_default",
        "Id": "274d82b58ef7a0c0ab416ea16a7a81e58f083748aef29e0b7bfff324c62f05ea",
        "Created": "2024-04-21T09:59:37.303645746Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.21.0.0/16",
                    "Gateway": "172.21.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "4d3af57c45055f7f887de168d8b894a87345bc2584f77e90c5b986baf8fbd12b": {
                "Name": "docker-piwigo_mysql-server-80_1",
                "EndpointID": "fd26e447aa94e9188f9661c13420ef4edfd45c2f0d4c3c6ae2137f63ae68e540",
                "MacAddress": "02:42:ac:15:00:02",
                "IPv4Address": "172.21.0.2/16",
                "IPv6Address": ""
            },
            "8b08f8b67ff6b513627a9432ad6f81c222bff572460a0cd011e39b4b7d79304c": {
                "Name": "piwigo",
                "EndpointID": "9f7a1699f512bf9a784378a5fdd954c80aef488e1162cb2f14f611ed3a6d57ab",
                "MacAddress": "02:42:ac:15:00:03",
                "IPv4Address": "172.21.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "docker-piwigo",
            "com.docker.compose.version": "1.29.2"
        }
    }
]

ed impostando nel nome del server del db docker-piwigo_mysql-server-80_1 della configurazione di piwigo sono riuscito ad andare avanti,

ma mancava nella definizione del db l’utente e password. Mi sono cellagato sul docker del db con

docker exec -it docker-piwigo_mysql-server-80_1 /bin/bash
bash-4.4# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE USER 'utente'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.02 sec)

mysql> GRANT all PRIVILEGES ON piwigo.* TO 'utente'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

A questo punto la configurazione è andata a buon fine e il docker con piwigo e mysql funziona perfettamente

Aggiornamento pfSense 22.05

Per condividere un problema verificato su pfSense 22.05 con la scritta laconica

Unable to check for updates

quando, sulla home oage, provavi a verificare la presenza o meno di aggiornamenti.

il problema risiede nel file di configurazione errato:

more /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
FreeBSD: { enabled: no }

pfSense-core: {
url: “/pfSense_plus-v22_05_amd64-core”,
mirror_type: “srv”,
signature_type: “fingerprints”,
fingerprints: “/usr/local/share/pfSense/keys/pkg”,
enabled: yes
}

pfSense: {
url: “/pfSense_plus-v22_05_amd64-pfSense_plus_v22_05”,
mirror_type: “srv”,
signature_type: “fingerprints”,
fingerprints: “/usr/local/share/pfSense/keys/pkg”,
enabled: yes
}

il file di configurazione corretto punta ad un url diversa:

more /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf

FreeBSD: { enabled: no }

pfSense-core: {
url: “pkg+https://firmware.netgate.com/pkg/pfSense_plus-v22_05_amd64-core”,
mirror_type: “srv”,
signature_type: “fingerprints”,
fingerprints: “/usr/local/share/pfSense/keys/pkg”,
enabled: yes
}

pfSense: {
url: “pkg+https://firmware.netgate.com/pkg/pfSense_plus-v22_05_amd64-pfSense_plus_v22_05”,
url: “/pfSense_plus-v22_05_amd64-pfSense_plus_v22_05”,
mirror_type: “srv”,
signature_type: “fingerprints”,
fingerprints: “/usr/local/share/pfSense/keys/pkg”,
enabled: yes
}

appare finalmente

Version 23.01 is available.

Version information updated at Mon Mar 25 13:19:59 CET 2024  

Mongo reindex

Quando faccio la copia dei date da un db ad un altro e devo ricreare gli indici

db.getCollectionNames().forEach(function(col) {
    var indexes = db[col].getIndexes();
    indexes.forEach(function (c) {
        var fields = '', result = '', options = {};
        for (var i in c) {
            if (i == 'key') {
                fields = c[i];
            } else if (i == 'name' && c[i] == '_id_') {
                return;
            } else if (i != 'name' && i != 'v' && i != 'ns') {
                options[i] = c[i];
            }
        }
        var fields = JSON.stringify(fields);
        var options = JSON.stringify(options);
        if (options == '{}') {
            result = "db." + col + ".createIndex(" + fields + "); ";
        } else {
            result = "db." + col + ".createIndex(" + fields + ", " + options + "); ";
        }
        result = result
            .replace(/{"floatApprox":-1,"top":-1,"bottom":-1}/ig, '-1')
            .replace(/{"floatApprox":(-?\d+)}/ig, '$1')
            .replace(/\{"\$numberLong":"(-?\d+)"\}/ig, '$1');
        print(result);
    });
});

con questo ottengo la lista degli indici dal DB di origine e poi l’output è la stringa che devo dare in pasto a Mongo per rigenerare l’indice, per esempio

db.collection.createIndex({"clientCode":1});

Postgresql e la funzione vacuum

Facendo l’aggiornamento di release di postgresql dalla 13.9 alla 15.2, in ambiente AWS,bisogna rifare le statistiche delle tabelle: ho cercato in giro se fosse possibile in maniera automatica, ma alla fine ho realizzato uno script per aggiornare le info:

schemas=psql -t -A -U USER -h IP_ADD DATABASE -c "select schema_name from information_schema.schemata"

for schema in $schemas
do
psql -t -A -U USER -h IP_ADD DATABASE -c "select format('analyse verbose %I.%I;', n.nspname::varchar, t.relname::varchar) FROM pg_class t JOIN pg_namespace n ON n.oid = t.relnamespace WHERE t.relkind = 'r' and n.nspname::varchar = '$schema' order by 1" | psql -U USER -h IP_ADD DATABASE
done

Come aggiungere spazio ad un disco di una VM sotto PVE

Di seguito quello che ho fatto per ampliare da 32 a 64GB lo spazio della mia macchina repository di immagini docker

[23059.572021] sd 2:0:0:0: [sda] 134217728 512-byte logical blocks: (68.7 GB/64.0 GiB)
[23059.573015] sda: detected capacity change from 67108864 to 134217728

root@docker:~# parted /dev/sda
GNU Parted 3.4
Using /dev/sda
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) print
Warning: Not all of the space available to /dev/sda appears to be used, you can fix the GPT to use all of the space (an extra 67108864
blocks) or continue with the current setting?
Fix/Ignore? f
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sda: 68.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 34.4GB 34.4GB ext4

(parted) resizepart 2 100%
Warning: Partition /dev/sda2 is being used. Are you sure you want to continue?
Yes/No? y
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sda: 68.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 1049kB 2097kB 1049kB bios_grub
2 2097kB 68.7GB 68.7GB ext4

(parted) quit
Information: You may need to update /etc/fstab.

root@docker:~# resize2fs /dev/sda2
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 8
The filesystem on /dev/sda2 is now 16776699 (4k) blocks long.

root@docker:~# df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 198M 1.3M 197M 1% /run
/dev/sda2 63G 28G 33G 47% /
tmpfs 988M 0 988M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 198M 4.0K 198M 1% /run/user/1000
overlay 63G 28G 33G 47% /var/lib/docker/overlay2/c3e70e17d7f859993c39376e66c91ac89099a1336d6bd5a577c701d3f687c921/merged
shm 64M 0 64M 0% /var/lib/docker/containers/677cfe3fd4c993f9a9f0ad650370d105bcc4c3c0e2ee46d012835b0348fdde31/mounts/shm

Accesso all’utente root di mysql da utente di sistema

Se provando a collegarti a mysql utilizzando:

mysql -u root -p

si ttiene questo errore, anche se la password è corretta,

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

La soluzione è cambiare l’autorizzazione di Mysql per l’utente root da auth_socket a qualcos’altro come caching_sha2_password.

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'my_password'

Add a comment

Aggiungere spazio disco su una vecchia DL360 G7

Ho avuto la necessità di aggiungere un paio di dischi alla vecchia DL360 G7, ma installare è stato un attimo, molto più lungo farf rigenerare il RAID5…

I comandi che ho dato sotto Proxmox per aggiungere i dischi al raid

ssacli ctrl slot=0 ld 1 add drives=2I:1:6,2I:1:7

Una volta finita la sincronizzazione dei dischi ho controllato che tutto fosse a posto

root@pve:/var/log# ssacli ctrl slot=0 ld all show status
logicaldrive 1 (2.18 TB, RAID 5): OK
root@pve:/var/log# ssacli ctrl slot=0 pd all show status
physicaldrive 1I:1:1 (port 1I:box 1:bay 1, 600 GB): OK
physicaldrive 1I:1:2 (port 1I:box 1:bay 2, 600 GB): OK
physicaldrive 1I:1:3 (port 1I:box 1:bay 3, 600 GB): OK
physicaldrive 1I:1:4 (port 1I:box 1:bay 4, 600 GB): OK
physicaldrive 2I:1:5 (port 2I:box 1:bay 5, 600 GB): OK
physicaldrive 2I:1:6 (port 2I:box 1:bay 6, 600 GB): OK
physicaldrive 2I:1:7 (port 2I:box 1:bay 7, 600 GB): OK

A questo punto ho ampliato il ld con

ssacli ctrl slot=0 ld 1 modify size=max forced

Ho dovuto fare il reboot per far vedere al PVE la nujova dimensione del disco (!)

growpart -h

per conferma e poi un

root@pve:~# growpart /dev/sda 3
CHANGED: partition=3 start=1050624 old: size=4686186647 end=4687237271 new: size=7029805207 end=7030855831
root@pve:~# zpool status
pool: rpool
state: ONLINE
scan: scrub repaired 0B in 00:05:58 with 0 errors on Sun Apr 10 00:29:59 2022
config:
NAME                                            STATE     READ WRITE CKSUM
rpool                                           ONLINE       0     0     0
  scsi-3600508b1001c28197d35b0c71acc18d8-part3  ONLINE       0     0     0
errors: No known data errors

ed espando il volume logico con

root@pve:~# zpool online -e rpool scsi-3600508b1001c28197d35b0c71acc18d8-part3

Huawei AT + SMS

Oggi mi sono imbattuto in un problema molto particolare…

Dovevo per lavoro configurare una chiavetta USB huawei per inviare e ricevere SMS con i comandi AT.

Inserisco la chiavetta nella porta USB ed ottengo la coppia (verificata tramite lsusb)

Bus 001 Device 025: ID 12d1:1f01 Huawei Technologies Co., Ltd. E353/E3131 (Mass storage mode)

Quando la cofigurazione è impoostabile via web la chiavetta si presenta

Bus 001 Device 026: ID 12d1:14db Huawei Technologies Co., Ltd. E353/E3131

Forzandola con usb_modemswitch e con il file

12d1:1f01

il cui contenuto è

Huawei E353 (3.se) and others

TargetVendor=0x12d1
TargetProduct=0x155e
MessageContent=”55534243123456780000000000000011063000000100010000000000000000″

Bus 001 Device 028: ID 12d1:155e Huawei Technologies Co., Ltd. HUAWEI_MOBILE

vengono esposte tre porte seriali che consentono di inviare (solo sulla prima) i comandi AT per la gestione del modem per (esempio) inviare e ricevere sms.

Ma a questo punto ho trovato il problema.

Volendo eliminare il blocco del PIN della SIM per poter gestire rapidamente i miei comandi AT, quindi:

il comando

AT+COPS=?

server per interrogare il modem per vedere quali operatori vede e la banda usata:
+COPS: (2,”I TIM”,”TIM”,”22201″,7),(1,”I TIM”,”TIM”,”22201″,2),(1,”I TIM”,”TIM”,”22201″,0),(3,”WINDTRE”,”WINDTRE”,”22288″,7),(3,”ILIAD”,”ILIAD”,”22250″,7),(3,”v)

invece il camando

AT+CMGF=1

imposta l’invio di SMS in formato ASCII, ma tentando di inviare lo SMS ottenevo

AT+CMGS=”+393481122334″
+CMS ERROR: 302

e lo stesso per la verifica del centro servizi!

AT+CSCA?
+CSCA: “002B003300390033003300350039003600300039003600300030”,145

ne un banale ATZ ha messo a resettato l’errore.

Per recuperare l’errore ho reimpostato il PIN sulla SIM e verificato

at+cpin?
+CPIN: SIM PIN

ed una volta sbloccato

AT+CPIN=”0000″

AT+CSCA?
+CSCA: “+393359609600”,145

OK
AT+CMGF=1
OK
AT+CMGS=”+393341122334″

Funziona ….
+CMGS: 1

Che il problema sia solo sul blocco/sblocco del PIN ?

Logrotate e MongoDB

Il server finisce lo spazio e MongoDB non funziona più.. Un classico .

Lo spazio finisce in quanto MongoDB logga una marea di dati e non viene installato di default una configurazione di logrotate per MongoDB, ma il problema (dopo) si risolve facilmente:

eseguire

vi /etc/logrotate.d/mongodb

ed inserire

/var/log/mongodb/*.log {
daily
rotate 30
compress
dateext
missingok
notifempty
sharedscripts
postrotate
/bin/kill -SIGUSR1 cat /var/lib/mongodb/mongod.lock > /dev/null 2>&1 || true
endscript
}

Per testare che tutto sia a posto eseguire

logrotate -vdf mongodb

Verificare sempre che il file sia di root e i permessi settati a 644