mercoledì 21 marzo 2018

Accesso remoto con TeamViewer a un sistema Linux headless sotto VirtualBox

Se si dispone di un account TeamViewer, è possibile gestire comodamente da remoto un server senza X installato.

In Ubuntu 16.04.4 LTS


#wget http://download.teamviewer.com/download/version_12x/teamviewer_i386.deb
#sudo apt-get install ./teamviewer_i386.deb
#sudo teamviewer setup

Se la macchina Linux gira sotto virtualizzazione VmWare non ci sono problemi.
Ma se sposto la macchina sotto virtualbox, il client teamviewer mostra un errore "Initializing Display Parameters", mentre il log su Linux riporta un loop di errori infinito

FB: Attaching to frame buffer device failed: 22, Errorcode=22
InitDesktop failed, waiting 1 second, Errorcode=22

Guardando le differenze tra le istanze che girano sotto vmware e virtualbox, ho scoperto che virtualbox usa un framebuffer proprietario vboxvideo

#dmesg | grep "frame buffer"

Aggiungendo questo modulo alla blacklist dei devices teamviewer ho pensato che potesse risolvere il problema

#sudo nano /etc/modprobe.d/blacklist-framebuffer.conf

aggiungi una linea
 
blacklist vboxvideo

e riavvia.

Invece appare il seguente errore

The framebuffer console seems to be unavailable or has the wrong format. Please make sure that
/dev/fb0 is accessible and it is configured to 32-bit depth.

sudo nano /etc/default/grub
GRUB_GFXMODE=1024x768x32

GRUB_GFXPAYLOAD_LINUX=keep
sudo update-grub
reboot

e finalmente funziona 

martedì 30 gennaio 2018

Win10 1709 System Image Restore VSS Error

https://social.technet.microsoft.com/Forums/windows/en-US/1f21b451-1431-414c-89e4-8010dfa5d239/win10-1709-system-image-restore-vss-error?forum=win10itprosetup

Con Windows 10 1709 non è più possibile utilizzare la funzione di restore dell'immagine di sistema.
E' una seccatura ma bisogna farsene una ragione.

Scarica dl.acronis.com/s/AcronisTrueImage2018.iso.
Utilizza Rufus per creare un disco bootable
Procedi come sempre con Backup e Restore

mercoledì 27 dicembre 2017

Utilizzo del Microfono in un controllo UWP WebView

L'utilizzo del microfono con le API Web Audio è ben descritto qui https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/microphone/

L'utilizzo del controllo WebView in una applicazione UWP è ben descritto qui:
https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/XamlWebView

Se voglio provare ad aprire la pagina del microfono all'interno dell'applicazione UWP devo aggiungere la funzionalità Microfono in Package.appmanifest, ma anche così non funziona.

Il trucco è aggiungere l'evento PermissionRequested al controllo WebView

<WebView x:Name="WebViewControl" PermissionRequested="WebViewControl_PermissionRequested"/>

private void WebViewControl_PermissionRequested(WebView sender, WebViewPermissionRequestedEventArgs args)
        {
            if (args.PermissionRequest.PermissionType == WebViewPermissionType.Media)
                args.PermissionRequest.Allow();
        }



 
 

venerdì 24 novembre 2017

Il Black Friday ha scassato i maroni

C'è ancora qualcuno al mondo il cui progetto di vita non sia cojonare il prossimo?

mercoledì 6 settembre 2017

Come aggiornare (quasi) facilmente VMWARE ESXi da 5.x a 6.x

Abilitare SSH, spegnere tutte le machine virtuali ed entrare in Maintenance Mode


Da ssh:

Controllare la versione corrente
~ # vmware -lv
VMware ESXi 5.5.0 build-3568722
VMware ESXi 5.5.0 Update 3

Configurare il firewall
~ # esxcli network firewall ruleset set -e true -r httpClient

Scaricare la lista aggiornata delle versioni

~ # esxcli software sources profile list -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" | sort -r
Name                              Vendor        Acceptance Level
ESXi-6.5.0-4564106-standard       VMware, Inc.  PartnerSupported
ESXi-6.5.0-4564106-no-tools       VMware, Inc.  PartnerSupported
ESXi-6.5.0-20170702001-standard   VMware, Inc.  PartnerSupported
ESXi-6.5.0-20170702001-no-tools   VMware, Inc.  PartnerSupported
...........
--------------------------------  ------------  ----------------

Il sito https://esxi-patches.v-front.de/ contiene informazioni su ogni versione.
Ad oggi l'ultima versione è:

2017-07-27 (Update 1)
Imageprofile ESXi-6.5.0-20170702001-standard (Build 5969303)

Dopo aver googlato per verificare che l'ultima versione sia compatibile con il ferro, procedere con l'aggiornamento

~ # esxcli software profile update -p ESXi-6.5.0-20170702001-standard -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml

Ahi!
[DependencyError]
VIB AR81Family_bootbank_net-atl1e_1.0.1.14 requires com.vmware.driverAPI-9.2.0.0, but the requirement cannot be satisfied within the ImageProfile.
VIB AR81Family_bootbank_net-atl1e_1.0.1.14 requires vmkapi_2_0_0_0, but the requirement cannot be satisfied within the ImageProfile.
Please refer to the log file for more details.


Il VIB è il driver per la scheda di rete Atheros interna al PC, ma non ha mai funzionato e ai tempi ho dovuto aggiungere una scheda di rete Intel.
Riprovo dopo aver rimosso  il VIB che non mi serve.
~ # esxcli software vib remove --vibname=AR81Family_bootbank_net-atl1e_1.0.1.14

Bene, ha funzionato.

Anzi no, infatti sono stato troppo ottimista:

[InstallationError]
[Errno 28] No space left on device

       vibs = VMware_locker_tools-light_6.5.0-0.23.5969300

Please refer to the log file for more details.

Questo thread salvifico https://communities.vmware.com/thread/560543 suggerisce di abilitare lo swap a livello Datastore: Manage->System->Swap Edit Settings.
Da Datastore "No" ho impostato un datastore

Riavviato, ripetuto l'aggiornamento e l'update ora ha funzionato

Rimettere a posto il firewall
~ # esxcli network firewall ruleset set -e false -r httpClient

Riavviare il sistema

~ # vmware -lv
VMware ESXi 6.5.0 build-5969303
VMware ESXi 6.5.0 Update 1

I log li visualizzo così: https://IP_of_Your_ESXi/host

La licenza ESXi 5.5 non è più valida e va sostituita con quella per ESXi 6.5.

Infine ho trovato nell'inventario una vm orfana poiché avevo brutalmente cancellato dal datastore la cartella che la conteneva.
L'unico modo che ho trovato per far sparire la voce invalida dall'inventario è stato quello di ripristinare la vm, riavviare il sistema e deregistrare la vm.


sabato 19 agosto 2017

Copia di file su server remoto senza password

Testato  con Ubuntu 16.04.3

Il metodo più semplice e sicuro è usare le chiavi SSH
Verificare che in /etc/ssh/sshd_config sia configurato
PubkeyAuthentication yes

$ scp -i .ssh/id_rsa source_path user@server:/destination_path .

id_rsa è la chiave privata generata con:
 
$ ssh-keygen -t rsa

La chiave pubblica id_rsa.pub deve essere copiata sul server dentro  ~user/.ssh/authorized_keys

$ ssh-copy-id -i .ssh/id_rsa.pub user@server

Una guida molto chiara è qui
Una guida per i server synology è qui e qui

La password mi veniva comunque richiesta e ho tribolato un po' per trovare l'errore.
Prima di tutto ho lanciato il comando in modalità debug

$ ssh -vv -i .ssh/id_rsa user@server

debug2: we did not send a packet, disable method
debug1: Next authentication method: password

Il passaggio successivo è stato consultare sul server il file /var/log/auth.log dove era finalmente riportato l'errore:

sshd[3471]: Authentication refused: bad ownership or modes for directory /home/user/.ssh

Infine

$ chmod 755 /home/user/.ssh

mercoledì 16 agosto 2017

Come individuare la lingua di una stringa in C#

Metti caso che vuoi sviluppare un sistema per determinare la lingua di una frase.
Uno dei metodi migliori sembra essere addestrare un classificatore, ma se i dati di partenza non sono corretti i risultati non saranno soddisfacenti. Un classificatore è un classico sistema Garbage in, Garbage out.
Quindi per sviluppare un sistema per determinare la lingua di una frase potrebbe essere utile disporre di un altro sistema per determinare la lingua di una frase,  in modo da filtrare i dati che servono per l'addestramento.
Da Windows 7 in poi si possono usare gli Extended Linguistic Services.
Su NuGet è disponibile un wrapper C# WindowsAPICodePack-ExtendedLinguisticServices

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.WindowsAPICodePack.ExtendedLinguisticServices;
using System.Diagnostics;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            MappingService langDetect = new MappingService(MappingAvailableServices.LanguageDetection);
            using (MappingPropertyBag bag = langDetect.RecognizeText("good morning vietnam", null))
            {
                string[] languages = bag.GetResultRanges()[0].FormatData(new StringArrayFormatter());
                foreach (string lang in languages)
                    Console.WriteLine(lang);
            }         
        }
    }
}