Archivio mensile:Febbraio 2021

Si ma come su utilizza il DB Oracle da PHP?

E’ vero, avevo scritto come ripristinare il funzionamento fra PHP e DB oracle, ma come l’avevo fatto ? Bho !!

Alla fine mi sono messo d’impegno per capire come e questi sono i passi :

Innanzitutto dal sito di Oracle, bisogna prendere i pacchetti del client Oracle, ma ci sono due difficoltà: la prima che bisogna registrarsi sul sito di Oracle per prelevare i pacchetti, che però sono pacchettizzati come rpm, ma possono essere convertiti facilmente da rpm id deb tramite alien; una volta a disposizione i pacchetti deb lanciare

dpkg -i oracle-instantclient18.5-sqlplus_18.5.0.0.0-4_amd64.deb
dpkg -i oracle-instantclient18.5-devel_18.5.0.0.0-4_amd64.deb
dpkg -i oracle-instantclient18.5-basic_18.5.0.0.0-4_amd64.deb

Seguito da

apt install php-dev php-pear build-essential libaio1

Aggiornare il repository del pecl

pecl channel-update pecl.php.net

a questo punto è possibile lanciare l’installazione vero e propria della libreria per il php, ma servono un paio di informazioni aggiuntive:

la versione che io ho installato era relativa alla version di php 7.4 e per lanciare la versione corretta di sorgente oci bisogna lanciare

pecl install oci8-2.2.0

che indica che la versione da installare è la 2.2.0 e non l’ultima (oggi è la 3.0.1) in quanto la 3.x è per la versione 8.0 del php ed inoltre bisogna cercare la di della libreria di Oracle: ne mio sistema è sotto /usr/lib/oracle/18.5/client64/lib

Quindi lanciare

pecl install oci8-2.2.0

ed alla richeta del path digitare

instantclient,/usr/lib/oracle/18.5/client64/lib

una volta terminate l’installazione bisogna creare/modificare il file /etc/ld.so.conf.d/oracle.conf

vi /etc/ld.so.conf.d/oracle.conf inserndo

/usr/lib/oracle/18.5/client64/lib

e poi

ldconfig

inserire all’interno dei due php.ini la riga

extension=oci8.so

e poi (nel caso di php-fpm per nginx) un

service php7.4-fpm restat

o

service apache2 restart

se tutto è filato liscio come dovrebbe essere stato con

php -i | grep -i OCI

avrete la conferma che le librerie di oracle sono utilizzabili !!

Piwigo e caricamento bulk

Non ho resistito…

ho messo da parte il mio scriptino bash basilare per passare ad uno script “più meglio assai di più” (forse) in python, che fa la stessa cosa, ma anche di più in quanto è ricorsivo.

Le immagini (per evitare spechi di banda e di spazio) sono ridotte, croppate ed aggiunto il bordino bianco che fa tanto anni 80!

#!/usr/bin/python3
import PythonMagick as Magick
from ftplib import FTP_TLS
import sys, os
import os.path
from pathlib import Path
 
def resize_and_crop(directory, photo):
    """
    Resize and crop image
    :param filename
    """
    img = Magick.Image(directory+'/'+photo)

    img.crop("4200X2800+20+20")
    img.resize("1600x1000");
    img.enhance() #full compression
    img.borderColor("white") #full compression
    img.border("20x20+0+0") #full compression
    img.magick('JPG')
    img.write('/tmp/'+photo)


if len(sys.argv) < 2:
    print("Devi passare il nome della directory da inviare allo script!")
    print("Sto uscendo...")
    sys.exit()

nome_script, directory_immagini = sys.argv

rootfs="/home/user/Immagini/"+directory_immagini
destdir="/public_html/photo/galleries/"+directory_immagini

if (os.path.isdir(rootfs) == False):
    print("Devi esistere il nome della directory da inviare allo script!")
    print("Sto uscendo...")
    sys.exit()
    
ftps = FTP_TLS('ftp.sito.com')
ftps.set_debuglevel(1)
ftps.set_pasv(True)
ftps.connect(port=21, timeout=80)
ftps.login('userid', 'password')
ftps.prot_p()
ftps.ccc()
try:
       ftps.cwd(destdir)
except Exception:
       ftps.mkd(destdir)
for (dir, _, files) in os.walk(rootfs):
       newdir=destdir+dir[len(rootfs):len(dir)]
       try:
               ftps.cwd(newdir)
       except Exception:
               ftps.mkd(newdir)
               ftps.cwd(newdir)
               print('Created new dir on remote')
       for f in files:
           head, tail = os.path.split(f)
           print(newdir)
           ftps.cwd(newdir)
           try:  
               print(ftps.size(f))
           except Exception:
                   resize_and_crop(dir, f)
                   file = open(os.path.join('/tmp', f),'rb')
                   cur_dir=(os.path.abspath(os.curdir))
                   os.chdir("/tmp")
                   ftps.set_debuglevel(1)
                   ftps.storbinary('STOR '+f, file,blocksize=8192)
                   ftps.set_debuglevel(0)
                   os.chdir(cur_dir)
                   file.close()
                   os.remove(os.path.join('/tmp', f))
ftps.close()

E uno script quick and dirty, ma sono interessanti gli utilizzi della libraria PythonMagick che consente di utilizzare da python i pacchetti grafici di ImageMagick e l’utilizzo di FTPS (come già riportato in un post precedente) per l’invio delle foto in sicurezza.. o quasi.

Per PythonMagic ho avuto alcuni problemi in quanto i sorgenti sono fermi alla version 2 di python, ma per fortuna sul repository di Ubuntu era disponibile il pacchetto python3-pythonmagick che mi ha tolto dall’impasse.

Cercando sulla rete NON HO TROVATO alcun documento che mi fornisse indicazioni su come utilizzare la libreria PythonMagick. Tuttavia seguendo diverse indicazioni che ho trovato, mi sono basato sugli esempi e note di Magick++ la controparte in C++ di Python l’utilizzo delle librerie di ImageMagick.

FTPS (si.. FPTS e non SFTP !) in bash Ubuntu 20.10

Per pubblicare le foto che scatto durante le partite di Rugby, ho utilizzato per diverso tempo il “banale” FTP, con tutti i problemi di sicurezza del caso.. (userid e password in chiaro e disponibile a TUTTI!!)

Facendo però FTP con fileZilla, vedevo che potevo utilizzare l’FTPS, l’FTP con criptazione.

L’FTP è uno dei primi protocolli/servizi di internet, insieme al telnet. All’inizio di internet (o per meglio dire di arpanet) non esistevano problemi di sicurezza e le password erano inviate sulla rete in chiaro (lo stesso protocollo pop ne è vittima).

Per ovviare a questi problemi di sicurezza, fu affiancato al protocollo FTP anche il servizio di TLS (Transport Layer Security) e SSL (Socket Secure Layer) in maniera di ottenere un riconoscimento e trasferimento dati sicuro, cifrato.

Con Ubuntu per fare questo ho utilizzato lftp con un piccolo file di configurazione: .lftprc

il contenuto del file è il seguente:

set ftp:ssl-auth TLS
set ftp:ssl-force true
set ftp:ssl-protect-list yes
set ftp:ssl-protect-data yes
set ftp:ssl-protect-fxp yes
set ssl:verify-certificate no

e nel mio batch viene utilizzato in questo modo

lftp -u userid,password ftp.miosito.com << EOF
cd /public_html/photo/galleries/$1
put /tmp/${file}
bye
EOF

Nel titolo ho detto non SFTP, in quato l’SFTP è un figlio del SSH ed ha bisogno del servizio SSH disponibile…

VmWare e UUID

Dopo aver installato un Ubuntu server in un ambiente gestito da VmWare ho verificato che il log produceva diversi errori…

prod multipathd[794]: sdb: failed to get sysfs uid: Invalid argument
prod multipathd[794]: sdb: failed to get sgio uid: No such file or directory
prod multipathd[794]: sda: add missing path
prod multipathd[794]: sda: failed to get udev uid: Invalid argument
prod multipathd[794]: sda: failed to get sysfs uid: Invalid argument
prod multipathd[794]: sda: failed to get sgio uid: No such file or directory
prod multipathd[794]: sdb: add missing path
prod multipathd[794]: sdb: failed to get udev uid: Invalid argument
prod multipathd[794]: sdb: failed to get sysfs uid: Invalid argument
prod multipathd[794]: sdb: failed to get sgio uid: No such file or director

cercando in rete ho trovato:

By default VMWare doesn’t provide information needed by udev to generate /dev/disk/by-id.
This can be done by setting the following:
Start the vSphere Client, and log in to a vCenter Server.
Select Virtual Machines and Templates and click the Virtual Machines tab.
Right-click the virtual machine for which you are enabling the disk UUID attribute, and select Power > Power Off.
The virtual machine powers off.
Right-click the virtual machine, and click Edit Settings.
Click the Options tab, and select the General entry in the settings column.
Click Configuration Parameters. The Configuration Parameters window appears.
Click Add Row.
In the Name column, enter disk.EnableUUID.
In the Value column, enter TRUE.
Click OK and click Save.
Power on the virtual machine.

Generatore di firewall per Linux / IpTables

Volendo implementare un firewall sul mio server casalingo, avevo pensato a diverse soluzioni, ufw, firewall-builder e tanti altri, ma nessuno mi faceva capire esattamente cosa e come fare.

L’unico era firewall-builder, ma non è aggiornato da moltissimo tempo, non è assolutamente user-friendly anche se possiede un interfaccia grafica.

Navigando su internet, molto tempo fa, ho trovato un sito che a fronte di semplici click, produceva un file ascii che poteva essere dato in pasto a linux utilizzando solo iptables: il sito per completezza è raggiungibile via http://easyfwgen.morizot.net/gen/

Ho preso il sorgente e dopo averlo modificato ho messo in linea il prodotto finale: al 90% fa quello che dovrebbe fare, ma vi prego di prestare attenzione, in quanto potrebbero esserci degli errori.

L’indirizzo al quale puntare il browser è

http://firewall.corsaro.biz

Speriamo che vi interessi come ha interessato me.