Cisco IP PHONE SPA504G aggiornare firmware e lingua

Foto 1 di 4

Mi hanno recentemente regalato un paio di datati IP Phone della Cisco, dopo aver verificato che si accendano ho pensato di perderci un po’ di tempo ed aggiornarli all’ultimo firmware disponibile, girovagando un po su internet ho trovato la procedura giusta e la riporto qui con i file che ho usato io.

Tanto per iniziare ho resettato l’apparato alle impostazioni di fabbrica.

Per farlo e’ stato sufficiente selezionare nel menu delle impostazioni del telefono la voce

14 ripristino impostazioni di fabbrica

Una volta fatto questo il telefono si resetta e, una volta collegato alla rete via cavo, acquisisce un indirizzo al quale e’ possibile risalire sempre dal menu di configurazione ( 9 Rete) o dal proprio router.

Conoscendo l’ip del telefono sulla propria rete si puo accedere alla sua interfaccia web digitandolo in un browser

Una volta avvenuto l’accesso e’ possibile gestire il telefono in ogni sua parte.

I miei telefoni dopo il reset non avevano nessuna password registrata quindi e’ stato possibile accedere in alto a destra anche alla sezione Admin + Advanced.

Ora serve il nuovo firmware che io ho trovato QUI

Il nuovo firmware deve essere messo a disposizione via http per il download sul telefono… in pratica deve essere disponibile sulla rete locale via http

Con la stringa :

serv=tftp://IP LOCALE DEL SERVERTFTP/;d0=English;x0=spa50x_30x_en_v756.xml;d1=Italian;x1=spa50x_30x_it_v756.xml

Inserita alla voce delle impostazioni: Regional -> Miscellaneous -> Dictionary Server Script

Per pubblicare velocemente un file in http io su linux ho usato webfs con uno scriptino che mi sono fatto per gestirlo velocemente

# !/bin/bash
#       _                             _      __         _ 
#  __ _| |__   __ _     __      _____| |__  / _|___  __| |
# / _` | '_ \ / _` |____\ \ /\ / / _ \ '_ \| |_/ __|/ _` |
#| (_| | |_) | (_| |_____\ V  V /  __/ |_) |  _\__ \ (_| |
# \__,_|_.__/ \__,_|      \_/\_/ \___|_.__/|_| |___/\__,_|
#                                            
##############################################################################
# Semplice script che avvia webfsd nella carella attuale o altra specificata
# Per comodita' elenca i file condivisi e l'ip:porta necessari per accedervi
#
##############################################################################
#   OVVIAMENTE:
#
#             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#                     Version 2, December 2004
#
#  Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
#
#  Everyone is permitted to copy and distribute verbatim or modified
#  copies of this license document, and changing it is allowed as long
#  as the name is changed.
#
#             DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
#   0. You just DO WHAT THE FUCK YOU WANT TO.
##############################################################################
#   OPPURE:
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
##############################################################################
#  Script-source by Paolo Baviero  <aba@baviero.it>  https://baviero.com

function usage()
        {
        echo "================= USO DI ${progname} ===================
        Script per condividere velocemente una cartella via http
        Basta indicare la cartella e questa viene condivisa sulla rete
        locale. Se non viene indicata alcuna cartella condivide quella
        attuale.

        Sintassi: ${progname}  /dir/desiderata

        hint to abadon@baviero.it"
        exit
        }

progname=$(basename ${0})

#Controllo se eseguito come utente root
if test $(id -u) = 0 ; then
    echo "Utente root, esecuzione script non permessa per motivi di sicurezza"
    exit
fi
# Verifica se è presente un parametro da riga di comando (non-vuota)
if [ -n "$1" ];then
        if [[ "$1" == "-h" || "$1" == "h" ]]; then
                usage
        fi
        if [[ -d "$1" ]]; then
                WEBFS_DIR="$1"
        else
                echo "Directory inesistente"
                exit
        fi
else
        WEBFS_DIR="."
fi

echo -e "Web share $WEBFS_DIR dir"
echo -e " Files-subdir shared are:\n"
ls -lh $WEBFS_DIR
# Trovo l'ip del pc nella rete locale
WEBFS_IP=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
# Imposto la porta
WEBFS_PORT="8080"
# Scrivo le info
echo -e "\nIP ADDRESS and PORT"
echo -e "$WEBFS_IP:$WEBFS_PORT\n"
echo "Press Control-C to EXIT"
# Eseguo comando vero e proprio, rimuovere "&> /dev/null" per vederne l'output 
webfsd -d -r $WEBFS_DIR -p $WEBFS_PORT &> /dev/null

Passaggi per Aggiungere/Sostituire un Disco al RAID1 ZFS su Proxmox

Stavo provando PROXMOX, il mio intento era di riutilizzare per la prova due vecchi dischi (256Gb e 320Gb) da mettere in raid1 (copia) con filesystem ZFS.

L’installer permette di creare un raid1 ZFS ma NON con due dischi di diverse dimensioni e questo e’ stato un problema. Per ovviare ho installato il sistema su un disco solo (il piu’ piccolo) con filesystem ZFS e successivamente ho creato il raid.

Ecco come installare un secondo disco.

Supponiamo questo scenario

  • Disco origine: /dev/sda (256GB)
  • Disco destinazione: /dev/sdb (320GB)

Cancella il Disco di Destinazione (se non gia’ vuoto o nuovo):

Utilizza wipefs per rimuovere tutte le firme delle partizioni dal disco di destinazione (/dev/sdb):

wipefs -a /dev/sdb

Copia le Partizioni dal Disco di Origine:

Usa sgdisk per copiare le partizioni dal disco di origine (/dev/sda) al disco di destinazione (/dev/sdb):

sgdisk /dev/sda -R /dev/sdb

Cambia l’ID del Disco di Destinazione:

Cambia l’ID del disco di destinazione per assicurarti che sia unico:

sgdisk -G /dev/sdb

Formatta la Partizione di Avvio:

La prima cosa da fare e’ identificare quale e’ la giusta partizione:

fdisk -l /dev/sda

Questo restituira’ la tabella delle partizioni del disco di origine che dopo i comandi appena eseguiti deve essere uguale sul disco di destinazione (fdisk -l /dev/sdb per controllare)

root@proxmox:~# fdisk -l /dev/sdb
Disk /dev/sdb: 298.09 GiB, 320072933376 bytes, 625142448 sectors
Disk model: WDC WD3200AAJS-2
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: gpt
Disk identifier: FC9BC34B-C37B-435A-BE68-2B06E6F80D3C

Device       Start       End   Sectors   Size Type
/dev/sdb1       34      2047      2014  1007K BIOS boot
/dev/sdb2     2048   2099199   2097152     1G EFI System
/dev/sdb3  2099200 488397134 486297935 231.9G Solaris /usr & Apple ZFS

Da qui si vede che la partizione di avvio e’ sdb2, e quindi si utilizza proxmox-boot-tool per formattare la partizione di avvio sul disco di destinazione (/dev/sdb2):

proxmox-boot-tool format /dev/sdb2

Inizializza la Partizione di Avvio:

Inizializza la partizione di avvio sul disco di destinazione:

proxmox-boot-tool init /dev/sdb2

Aggiungi il Disco al Pool ZFS:

A questo punto devi identificare il nome del primo “disco” nel raid, per farlo basta il comando:

    zpool status

Che restituira’ qualcosa tipo:

root@proxmox:~# zpool status -v
  pool: rpool
 state: ONLINE
config:

        NAME                                                      STATE     READ WRITE CKSUM
        rpool                                                     ONLINE       0     0     0
          ata-Hitachi_HTS543225L9A300_081112FB0F00LLJLE3DB-part3  ONLINE       0     0     0

errors: No known data errors

Aggiungi il disco di destinazione (/dev/sdb3) al pool ZFS esistente (rpool), unendo i due dischi:

zpool attach rpool ata-Hitachi_HTS543225L9A300_081112FB0F00LLJLE3DB-part3 /dev/sdb3

Verifica lo Stato del Pool ZFS:

Controlla lo stato del pool ZFS per assicurarti che il processo di resilvering sia iniziato e che il pool sia in stato ONLINE:

    zpool status

Ed ecco fatto, ora i due disch sono in raid1 e sono uno la copia dell’altro.

E se uno dei due dischi si rompe?

Se uno dei due dischi si dovesse rompere l’altro e’ in grado di fare il boot del sistema e far funzionare i servizi regolarmente. Questo ti dara’ inoltre il tempo e gli strumenti per sostituirlo.

il comando zpool status dovrebbe restituire qualcosa tipo:

root@proxmox:~# zpool status
  pool: rpool
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-4J
  scan: resilvered 59.8G in 00:30:10 with 0 errors on Wed Jul  3 19:39:59 2024
config:

        NAME                    STATE     READ WRITE CKSUM
        rpool                   DEGRADED     0     0     0
          mirror-0              DEGRADED     0     0     0
            505977634126597088  UNAVAIL      0     0     0  was /dev/disk/by-id/ata-Hitachi_HTS543225L9A300_081112FB0F00LLJLE3DB-part3
            sda3                ONLINE       0     0     0

errors: No known data errors

anche nella interfaccia web di proxmox si vede il degrado

Il disco che prima era di origine ora non e’ piu’ disponibile. Se seguissimo il sistema del “zpool replace” che viene suggerito recupereremo il raid1 dei dati ma il nuovo disco non farebbe il boot perché mancante delle prime due partizioni. Quindi consiglio un bel:

zpool detach rpool /dev/DISCODARIMUOVERE

e rifare la procedura piu’ o meno dall’inizio 🙂

Pi-Rex – Un HAT-ATX per RasperryPi4

Un HAT disegnato per RaspberryPi4 la cui funzione principale e’ di poter utilizzare un normale alimentatore ATX

Il RaspberryPi4 e’ una SBC (single board computer) con una discreta potenza che con una sua versione arriva ad avere ben 8GB di RAM. Processore e Ram sono in grado di svolgere compiti importanti. Il principale pregio del Pi4 e’ che consuma poco e fa’ molto e ci si puo’ collegare molta roba… che va’ alimentata!

Spesso mi trovavo con un alimentatore per il Pi4, uno per disco USB collegato (anche piu’ di uno alla volta) e quelli di eventuali aggeggi vari.

Ho pensato di creare una board da collegare al Pi4 e fargli gestire tutta l’alimentazione a lui collegato. L’ATX e’ un alimentatore pratico, ha tutte le tensioni che mi servivano, filtrate e belle. Tanta ma tanta disponibilita’ di potenza e,sopratutto, facilmente reperibili a basso costo! (Usati te li regalano praticamente).

Ecco quindi l’idea e come la ho sviluppata con Kicad.

Quella che trovate qui sotto e’ la versione di prova (0.1). Per la stampa del PCB mi sono affidato questa volta a www.pcbway.com che ha prezzi ottimi e spedizioni economiche. Inoltre KiCad ha un plugin di esportazione sul loro sito per me perfetto..

Sono possibili errori visto che non la ho ancora montata ne SCONSIGLIO per il momento la produzione.

Le caratteristiche che ho voluto sono le seguenti:

  • Alimentazione di tutti gli apparati (compreso il RaspberryPi4) connessi attraverso un alimentatore standard ATX da pc.
  • Accensione e spegnimento COMPLETO (no sospensioni) attraverso un unico pulsante. Funzione ottenuta per il momento con un integrato FlipFlop e un NAND Gate. In pratica:
    • RPI Spento: Pressione breve -> Accensione
    • RPI Acceso: Pressione breve -> Richiesta di reboot/spegnimento al sistema (pin dedicato)
    • RPI Acceso: Pressione lunga -> Spegnimento BRUTALE togliendo completamente l’alimentazione
  • Gestione di piu’ ventole in standard PWM (4pin) per poter gestire la temperatura al meglio all’interno delle realizzazione dove viene impiegata
  • Esposizione di tutte le possibili interfacce di comunicazione
    • SPI
    • UART
    • I2C ( 2 canali possibili per gestire piu’ sensori uguali)
    • Pin del RaspberryPi inutilizzati
  • Controllo di un carico importante (220V) per apparati subordinati al RPI
  • Gestione di una striscia a LED RGB 5050 di alemno 3metri (ho un piccolo rack da illuminare 🙂 )
  • Beep! A chi non piace una cosa che possa fare BEEP!

Il tutto completato con connessioni che si possano portare esternamente su di un case.

Alimentare cosi il mio RaspberryPi4 mi ha permesso di collegare una quantità infinita di apparati esterni, prima non mi era possibile se non con numerosi alimentatori dedicati.

L’esempio piu’ pratico e’ collegare 4 Hard Disk rotazionali di recupero utilizzando un bridge usb unico (tipo QUESTO).

Ok, me ne sono accorto pure io, il throughput non e’ il massimo ma funziona (con un piccolo escamotage software) e esistono ancora scenari in cui la velocità assoluta non e’ indispensabile (cavolo… stai usando un RPI, accontentati!)

Purtroppo, dopo aver ricevuto la prima stampa delle schede mi sono reso conto di alcuni errori che richiedono interventi di una certa rilevanza per far funzionare la scheda, appena posso cercherò di rimediare 🙂

DOWNLOAD dei file per la produzione

DOWNLOAD del software per il Pi4 per gestire al meglio la scheda (non ancora scritto ma si fara’!)

Proxmox – Aggiungere dischi fisici ad una VM

Ipotiziamo di avere un server proxmox con alcune macchine virtuali.

Ad una di queste macchine virtuali si vuole collegare uno o piu’ dischi fisici, cioe gli si vuole dedicare un nuovo disco, magari non per espandere il sistema ma semplicemente per aggiungere storage.

immaginiamo di voler collegare due nuovi dischi alla VM con id 250.

Una volta collegati e riavviato il server dobbiamo identificarli con il comando lsblk

{root@proxmox-server /}$ lsblk 
NAME     MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda        8:0    0 953.9G  0 disk 
├─sda1     8:1    0  1007K  0 part 
├─sda2     8:2    0     1G  0 part 
└─sda3     8:3    0 952.9G  0 part 
sdb        8:16   0 953.9G  0 disk 
├─sdb1     8:17   0  1007K  0 part 
├─sdb2     8:18   0     1G  0 part 
└─sdb3     8:19   0 952.9G  0 part 
sdc        8:32   0 465.8G  0 disk 
sdd        8:48   0 465.8G  0 disk 
zd0      230:0    0    50G  0 disk 
├─zd0p1  230:1    0  1007K  0 part 
├─zd0p2  230:2    0   512M  0 part 
└─zd0p3  230:3    0  49.5G  0 part 
zd16     230:16   0  16.5G  0 disk 
├─zd16p1 230:17   0     2G  0 part 
└─zd16p2 230:18   0  14.5G  0 part 

I due dischi che ci interessano sono SDC e SDD, infatti una volta installati nella VM li gestiremo in raid1 con zfs.

Ora dobbiamo trovarne l’id e per farlo lo crechiamo con ls -n /dev/disk/by-id/

{root@proxmox-server /}$ ls -n /dev/disk/by-id/
total 0
lrwxrwxrwx 1 0 0  9 Aug  4 17:21 ata-F -> ../../sda
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-F1-part1 -> ../../sda1
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-F-part2 -> ../../sda2
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-F-part3 -> ../../sda3

lrwxrwxrwx 1 0 0  9 Aug  4 17:52 ata-Hitachi_HDP725050GLA360_TANTAROBA1 -> ../../sdd
lrwxrwxrwx 1 0 0  9 Aug  4 17:52 ata-Hitachi_HDP725050GLA360_TANTAROBA2 -> ../../sdc

lrwxrwxrwx 1 0 0  9 Aug  4 17:21 ata-SSD -> ../../sdb
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-SSD-part1 -> ../../sdb1
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-SSD-part2 -> ../../sdb2
lrwxrwxrwx 1 0 0 10 Aug  4 17:21 ata-SSD-part3 -> ../../sdb3
lrwxrwxrwx 1 0 0 12 Aug  4 17:21 lvm- -> ../../zd16p2
lrwxrwxrwx 1 0 0 11 Aug  4 17:49 lvm- -> ../../zd0p3

Una volta individuati gli id si collegano semplicemente alla macchina con il comando:

{root@proxmox-server /}$ /sbin/qm set 250 -virtio2 /dev/disk/by-id/ata-Hitachi_HDP725050GLA360_TANTAROBA1 
{root@proxmox-server /}$ /sbin/qm set 250 -virtio3 /dev/disk/by-id/ata-Hitachi_HDP725050GLA360_TANTAROBA2

Una volta collegati li si ritrovera’ all’interno delle configurazioni della VM.

Ed ora si possono utilizare per cio’ che si vuole direttamente nella VM.