Redimensionner un disque VMDK

(source: http://www.jeffgeerling.com/blogs/jeff-geerling/resizing-virtualbox-disk-image)

Sous Mac

# Clone the .vmdk image to a .vdi.
vboxmanage clonehd "virtualdisk.vmdk" "new-virtualdisk.vdi" --format vdi
# Resize the new .vdi image (30720 == 30 GB).
vboxmanage modifyhd "new-virtualdisk.vdi" --resize 30720
# Optional; switch back to a .vmdk.
VBoxManage clonehd "cloned.vdi" "resized.vmdk" --format vmdk

Crypter un mot de passe sous win7

Powershell permet de crypter un mot de passe, le stocker dans un fichier et le transmettre.

les commandes utilisées sont:

ConvertTo-SecureString et Convertfrom-securestring

Sur internet on trouve pas mal d’infos… mais très peu sur la possibilité d’exporter ce fichier vers une autre machine ou après une réinstallation complète. En effet si on réutilise le fichier contenant le mot de passe on ne peut pas le décrypter !!!

Je n’ai trouvé que un ou deux sites expliquant pourquoi clairement.

http://www.travisgan.com/2015/06/powershell-password-encryption.html

et à la fin de la page de

http://nicolaslang.blogspot.fr/2014/06/stocker-un-mot-de-passe-dans-un-script.html

Pour crypter

Il est très fortement déconseillé de mettre en claire le mot de passe à chiffré dans le script. Il faut donc privilégier la commande

read-host -assecurestring -prompt 'Votre mode de passe'|ConvertFrom-SecureString | Out-File C:\encrypted.txt

et pas

ConvertTo-SecureString ‘mOnP@ssw0rd’ -asplaintext -force|ConvertFrom SecureString | Out-File C:\encrypted.txt

Les deux commande font la même chose, elles sécurisent le mot de passe par encodage. On peut s’arrêter là si on veut juste stoker et réutiliser le fichier sur la même machine. Personnellement je ne voit pas trop l’intérêt! On stocke le mdp dans un fichier pour le transmettre ou pour le réutiliser sur une autre machine.

Et pourquoi on ne peut pas réutiliser le fichier sur une autre machine? Parce que pour encoder il faut un clé d’encodage et là par défaut la clé générée est propre à la machine. Elle est stockée ou cette clé??? Je ne sais pas!!!

On va donc utilisé une clé que l’on connait pour crypter. Grâce à l’option -securekey

Comment ça marche?

On fournit une clé de 16, 24 ou 32 digit (non accentué)

When you use the Key or SecureKey parameters to specify a key, the key length must be correct. For example, a key of 128 bits can be specified as a byte array of 16 digits. Similarly, 192-bit and 256-bit keys correspond to byte arrays of 24 and 32 digits, respectively.

(https://technet.microsoft.com/fr-fr/library/hh849814.aspx)

Cette clé doit être encodée. Une fois encodée elle servira comme clé de cryptage du mot de passe.

rem clé pour crypter
 $cle = read-host -prompt 'cle de cryptage (16 caracteres)'|ConvertTo-SecureString -asplaintext -force
rem mot de passe à crypter
 $passwd = read-host -assecurestring -prompt 'Votre mode de passe'
rem cryptage du mot de passe
 Convertfrom-securestring -securekey $cle -secureString $passwd  | out-file c:\encrypted.txt

Voilà le fichier encrypted.txt peut être réutilisé sur une autre machine ou une fresh install.

Pour décrypter le mot de passe

Il faut donc le fichier contenant le mot de passe crypté et connaitre le clé de cryptage.

$cle = read-host -prompt 'cle de cryptage (16 caracteres)'|ConvertTo-SecureString -asplaintext -force

$password=get-content c:\encrypted.txt | ConvertTo-SecureString -securekey $cle;

par exemple pour un script de connexion à un domaine

set-variable -name domaine -value %domain%;

set-variable -name username -value '%domain%\\%userDom%';

$cle=ConvertTo-SecureString '%cle%' -asplaintext -force;

$password=get-content c:\encrypted.txt | ConvertTo-SecureString -securekey $cle;

$Credential=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList %domain%\\%userDom%,$password;

Add-Computer -DomainName $domaine -Credential $Credential

VMware Fusion

VMware est sans doute l’une des premières solutions de virtualisation de postes que je connaisse. A l’époque il n’existait que pour les PCs (VMware Workstation) et était gratuit. Cela fait quelque année qu’il existe sous OSX sous le nom de VMware Fusion… mais payant! Et depuis que je suis passé sous Virtualbox qui est multiplateforme et gratuit je ne m’y suis pas intéressé plus que ça puisque je suis passé sous Linux et Mac. Mais par curiosité je voulais re-tester VMware… et je suis tombé sur pas mal de site qui propose de clé d’activation. Parfait pour un test! Pensez à l’acheter si vous pensez finalement l’utiliser définitivement!!!

un des sites: http://appnee.com/vmware-fusionpro-78-all-versions-universal-license-keys/

Copie au cas où le site venait à disparaitre.

// Working License Keys //

Group License Keys
Fusion/Pro 7
1 HYCTT-5L9RQ-44T8L-C1RG5-K2GPC
ZZAX9-UR1QM-M4MQ0-5RYQ6-6C539
LVGJ3-KHW30-M4MRU-T3N7E-RCX43
NYZ5L-HDV3T-44HKM-WW952-227Y1
4VJHT-2YWWP-04J4M-HV4ZE-X378E
2 VZ15K-DKD85-M85EP-W4P79-XAAU4
VU50A-2UW9Q-M88UY-D7MQX-ZG8X8
VG7WU-41G97-48D8Y-X5PQZ-MLHZA
VA5MK-49E1H-488NP-ENXXG-M28X6
YZ3TU-AHWE2-0892Q-YWYET-Q7UDD
GV5DK-8RDDJ-484GQ-FZNNG-Y2UYA
CU74A-6ZE0J-489WP-YXZ59-W70W2
CG500-47EEM-08EAQ-GGW7Z-QP2VD
CF7X2-FFFEP-48DQZ-ZFQEE-QAUVF
GV1MA-DPW57-0894Y-H4NZT-X6KC2
3 4V4RD-4RJ96-NZRH1-2U354-2AX0T
1Y03W-2M00J-VZM38-YJ17P-83LMU
MA6MD-DFHDN-UZ7M9-LT2QM-CA2LC
5G4DD-FKJEN-7ZV01-QR2XP-2AK7N
MU2YY-42LD0-2ZQW9-0T1NH-1CY0N
4 5G19L-13E7E-H4MWT-54DGP-5LQZ1
1VWJV-540AV-H4HNR-HW2QK-DYZ23
TAWWT-9HKW4-H4NM6-57UN3-66E6E
EYWDT-WHW7Y-H4WRR-8EMX0-0AGNE
ZFHN1-D2DGE-44HRH-7NC5H-1GG49
5 UAA8V-PE0FQ-M4NU4-D1ZEQ-3Q7YC
UGM99-03A0G-M4W33-CEXGK-67GG7
RY2R1-QTFRK-M4J42-FPHQU-5PQJ7
Fusion/Pro 8
1 FY75A-06W1M-H85PZ-0XP7T-MZ8E8
ZY7TK-A3D4N-08EUZ-TQN5E-XG2TF
FG1MA-25Y1J-H857P-6MZZE-YZAZ6
2 FV3WK-0XFEP-081DY-DQYEX-NZ8Z8
3 FY7N2-6RGD2-081XZ-UYWQC-ZPKCA
4 FA3RK-FHGD5-M88TZ-V4WEZ-MVAW0
FU75U-4KD5L-0845Z-JEXNZ-MLKD8
UV7XK-4PXEJ-080WY-4WXQT-NC0ZF
VC79R-6NF81-M84XZ-VNW5G-NKUW8
GC1HA-01Z14-H8D2P-04NNZ-Z6RY0

// Download URLs //

Edition Official Trial Installer
VMware Fusion 8
VMware Fusion 8 Pro

Activer les produits microsoft

Je ne vous ai rien dit…

http://www.microsoft-toolkit.com/

Comment ça marche?

http://freemicrosofttoolkit.com/

Sinon dans Google cherchez: « Microsoft toolkit »

 

Mais je ne vous ai toujours rien dit….

Windows:

https://www.microsoft.com/fr-fr/software-download/

Office

http://www.olitech.fr/telecharger-iso-microsoft-office-all-versions-32-bits-64-bits.php

 

Clonezilla Live et PXE

Si vous avez une erreur « stalled » avec Clonezilla Live et PXE, ce qui suit peut vous aider.

Pour que clonezilla live focntionne en PXE il est nécessaire de modifier le initrd.img

En effet par défaut la commande tftp utilise une option qui ne fonctionne pas chez moi: -b 65464

Il faut donc la supprimer. Pour cela on va utiliser la FAQ de Clonezilla ici

une fois copié dans un répertoire temporaire on décompresse le initrd.img

xzcat initrd.img | cpio -idm

 

Ceci fait il éditer le fichier: /lib/live/boot/9990-mount-http.sh et modifier les lignes 35 et 36 pour supprimer/commenter et les remplacer par

#log_begin_msg "Trying tftp -g -b 65464 -r $rfile -l ${dest}/$lfile $ip"
#tftp -g -b 65464 -r $rfile -l ${dest}/$lfile $ip
log_begin_msg "Trying tftp -g -r $rfile -l ${dest}/$lfile $ip"
tftp -g -r $rfile -l ${dest}/$lfile $ip

Une fois terminé recompressez le tout

find . | cpio --quiet -o -H newc | xz -c -9 --check=crc32 >  ../initrd.img

 

Reload d’une page web avec du javascript

Voici une méthode pour recharger automatiquement la page de votre site coté utilisateur. Contrairement à la balise meta qui fixe un délai pour recharger ici on va déterminer quand on veut la période!

il faut pour cela que la page à recharger soit en php et inclure ce code

 
// Reload page
// a une date et heure donnée
//Date(year, month, day, hours, minutes, seconds, milliseconds);
refreshPageNextDayAt(new Date(2015,11,15,12,05));
// a une heure donnée vi un fichier inclu contenant un timestamp
//refreshPageNextDayAt(<?php include_once('refreshtime.inc'); ?>);
// Recharge la page
function refreshPageNextDayAt(_date) {
    var _now = new Date();
    
    if (typeof _date === "object"){
        
        var refreshDate = _date;
    }
    
    if (typeof _date === "number" && _date < 24){
        var refreshDate = new Date(_now.getFullYear(), _now.getMonth(), _now.getDate()+1,_date);
    } else {
        var refreshDate = new Date(_now.getFullYear(), _now.getMonth(), _now.getDate()+1,3);
    }
    
    if (typeof _date === "number" && _date > _now){
        var refreshDate = _date;
    }
    
    //alert(refreshDate);
    if (typeof _date === "object"){
        setTimeout(function() { window.location.reload(true); }, refreshDate.getTime()-_now.getTime());
    } else {
        setTimeout(function() { window.location.reload(true); }, refreshDate -_now.getTime());
    }
}

La fonction refreshPageNextDayAt() prend en paramètre une date (et heure) qui sera la date de reload de la page. Si vous mettez cette date dans un fichier via votre interface d’admin ou autre vous pouvez forcer le reload de la page de votre visiteur.

 

Client serveur avec event-stream « server-sent events »

C’est quoi le event-stream??? Ben je ne connaissais pas jusqu’à hier!!! Je l’ai découvert en cherchant une solution pour pousser la mise à jour d’une page vers le visiteur qui est en train de la consulter. Et ceci sans faire un timing de reload mais en realtime.

A la base je bossais sur un projet d’écran d’affichage. L’idée est que l’écran doit être automatiquement mise à jour quand le gestionnaire de l’écran modifiait les slides qui défilent. (Je vais bientôt mettre le projet sur GitHub).

Comment ça marche le event-stream?

C’est un peut comme du client-serveur. Le browser du visiteur (dans mon cas le panneau d’affichage) est le client. Le site hébergé sur le serveur est la partie serveur. Jusque là normal. Mais habituellement si on veut que les informations s’actualisent le visiteur doit faire un F5 ou Ctrl+R ou Ctrl+F5. Problème… moi je n’ai personne pour faire à la mano cette action sur mon écran sans clavier à 3 mètres de haut sur le mur! Et bien là c’est le serveur qui pousse (en continue) les modifications vers le browser qui lui reste à l’écoute en permanence. Il n’y a pas de connexion comme le WebSocket. Voici les sites qui m’ont permis de comprendre le fonctionnement:

https://developer.mozilla.org/fr/docs/Server-sent_events/Using_server-sent_events

http://www.html5rocks.com/en/tutorials/eventsource/basics/?redirect_from_locale=fr

http://www.developerdrive.com/2012/03/pushing-updates-to-the-web-page-with-html5-server-sent-events/

Pour aller au plus simple, un example. On va créer 3 pages: client.php, sendMsg.php et admin.php. Le répertoire qui contient ces pages devra être en lecture et écriture par le serveur web (www-data, apache…)

On va modifier du contenu à partir de la page admin.php, ce contenue sera poussé par sendMsg.php vers la page visitée (client.php) par un utilisateur.

Le serveur (sendMsg.php)

<?php

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

/**
 * Constructs the SSE data format and flushes that data to the client.
 *
 * @param string $id Timestamp/id of this connection.
 * @param string $msg Line of text that should be transmitted.
 * 
 */
function sendMsg($id, $event,$retry,$msg) {
  echo "id: $id" . PHP_EOL;
  echo "event: $event" . PHP_EOL;
  echo "retry: $retry" .PHP_EOL;
  echo "data: $msg\n\n" . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
}

if (is_file('check.txt')) {
    $serverTime = time();
    sendMsg($serverTime,'refreshMe','1000','1');
    sleep(5);
    unlink('check.txt');
}

?>

Que fait ce script:

il envoie (stream) le message ($msg) en continue en demandant au client de le consulter toutes les secondes (1000).
Il émet pendant 5 secondes (sleep) , c’est l’existence du fichier check.txt qui déclenche ou arrête le stream.

Le client (client.php)

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    
    <?php include_once('include.inc'); ?>
    
    <script type="text/javascript">
        if (!!window.EventSource) {
          var source = new EventSource("sendMsg.php");
        } else {
          alert('Navigateur incompatible!!');
        }

        source.addEventListener('refreshMe', function(e) {
          if (e.data == 1){
              source.close();
              setTimeout(function(){location.reload()},5000);
            }
        }, false);
    </script>
</body>
</html>

Que fait ce script:

Il affiche le contenu du fichier include.inc. Ce fichier étant modifié par admin.php, il le recharge à chaque fois que la page est actualisée (reload). Le rechargement est déclenché quand la valeur ‘1’ est envoyée par sendMsg.php qu’il écoute en continue (grâce à EventSource)

La page d’admin (admin.php)

<?php
if($_POST['check'] == 1){
    touch('check.txt');
    file_put_contents('include.inc', $_POST['message']);
}
?>


<!DOCTYPE>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
    
<form action="#" method="post">
    <input id="message" name="message" type="text">
    <input id="check" name="check" type="hidden" value="1"> 
    <input id="input" type="submit" value="refresh">          
</form>

</body>
</html>

Que fait le script:

On saisi du texte qui sera écrit dans include.inc qui sera chargé par la page vue par le visiteur ET déclenchera le stream en créant le fichier check.txt.

Et voilà, à vous de tester et l’intégrer à vos besoins.

Premier pas avec Git

Après avoir hésité entre SourceForge, FusionForge, Subversion(SVN), j’ai finalement opté pour Git (GitHub). Parce que j’utilise Linux et qu’il me semble à premier vue plus simple. Mais c’est totalement arbitraire comme choix. Le temps me dira si c’est un bon choix pour mon usage. Je me suis beaucoup basé sur la documentation française de Git pour ce choix et sur la page de Christophe Ducamp. Voici donc pour mémo les principales commandes pour un usage basic.

1 – Installer Git

Il faut biensure installer git sur votre machine. Je ne vais pas réinventer la roue et faire de la paraphrase alors lisez documentation officielle.

2 – Paramétrages

Comme c’est un mémo, je vais mettre ici les étapes à faire. Pour plus de détails voir la documentation.

Dans un terminal saisir:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

Le user.name c’est votre pseudo ou nom de développeur qui apparaitra pour le suivi des validations de votre code.

Les user.mail… vous l’avez deviné?

Petit conseil utilisez votre pseudo et votre mail de votre compte GitHub si vous en avez déjà un.

Vous pouvez faire le reste de la configuration comme mentionné dans la documentation, mais ces 2 lignes suffisent.

 3 – Créer un dépot (ou repository)

Git s’utilise de 2 façons: en local et/ou sur un serveur. Pour mon cas je veux utiliser git pour versionner mon code sur un serveur distant, donc je passe directement à ce type d’usage.

Il y a 2 cas de figures:

Le clonage: j’ai déjà un dépot de code sur un serveur, plutot dans le cas ou je veux récupérer un dépot d’une autre personne pour faire un fork.

La création: je veux créer mon dépot perso ou en rappatrier un existant sur un serveur (GitHub)

a – Le clonage

Le clonage va importer le répertoire du projet principal (master) que vous souhaitez dans le répertoire local où vous etes actuellement. Dans le répertoire du projet importé il y aura un répertoire caché (.git) qui contient TOUTES les informations concernant le projet de la branche master (historique, versions, indexes, etc…) Pour cela on saisi dans un terminal git clone [url].git

 git clone https://github.com/beemoon/boxSyn.git

ATTENTION on ajoute à la fin de l’url le suffixe « .git »

 b – La création (en local)

Ici on crée un nouveau projet vide en local. Pour cela on crée un répertoire, on initialise un projet (répertoire caché) git, on indexe tous les fichiers du projet puis on valide l’indexation (commit). Le commit valide le changement de code. On le verra dans un autre article mais les 2 dernières commandes sont importantes pour la prise en compte de toutes les modifications de code. Ici on le fait pour initialiser le projet.

mkdir monprojet
cd monprojet
git init
git add .
git commit –m 'version initiale du projet'

 4 – Ajouter un dépot (serveur) distant.

En ajoutant un dépot distant on va exporter notre code pour le sauvegarder ou simplement pour partage son code. On va biensure utiliser GitHub !!!

Dans un terminal saisir git remote add [nomcourt] [url].git

git remote add boxsync https://github.com/beemoon/boxSync.git

Le nom court est un alias. Par défaut (si on en met pas) il s’appelle « origin »

5 – Importer un projet du serveur en local.

C’est un peu comme le clone SAUF que ici on importe une branche quelconque du serveur dans la branche master locale de votre machine. Il ne clone pas le projet (dossier caché) « .git » du serveur mais importe seulement les fichiers. On peut l’utiliser à la fin de la section 3b plus haut.

git pull master https://github.com/beemoon/boxSync.git

 

L’usage de git clone et git pull est très basique ici. Ils seront utilisés de façon plus complexe pour des forks ou des branches d’un projets. Mais ce n’est pas le sujet ici car c’est pour un niveau plus avancé d’utilisation de Git.

Maintenant qu’on a un projet on peut travailler avec git et GitHub. (prochain article)