18 Dec 2017, 00:00

Notes en vrac sur Azure AD Connect et Office 365

Mise en cohérence des domaines

Dans mon cas, l’AD avait été pis en place il y’a longtemps, le domaine local était du genre domain.oldcompany.com, mais les utilsateurs utilisaient aujourd’hui des adresses mail du genre user@newcompany.fr, et l’abonnement O365 avait pour domaine initial unusedcompany.onmicrosoft.com.

Dans ces conditions, la synchro de l’AD vers Azure donnait des identifiants du type nomprenom@unusedcompany.onmicrosoft.com, ce qui rend tout plus pénible, par exemple la connexion à OWA qui ne marche pas avec d’éventuels alias, mais qu’avec cet identifiant.

Comme le domaine initial ne peut être changé, il faut ajouter et vérifier le domaine newcompany.fr dans la gestion des domaines sur le portail O365, connecté en admin de l’abonnement. Pour le vérifier, il faudra aller mettre une preuve TXT dans la zone DNS.
Il faut ensuite ajouter un nouveau suffixe UPN au domaine (Outils d’administration -> Domaines et approbations Active Directory -> Propriétés -> Suffixes UPN), on ajoutera ici newcompany.fr car c’est l’adresse couramment utilisée par l’entreprise. Il faut ensuite modifier les suffixes UPN des utilisateurs dans les Utilisateurs et Ordinateurs AD, pour les passer de p.nom@domaine.oldcompany.fr à p.nom@newcompany.fr. Il est possible de le faire en PowerSehll, par exemple avec ce script

Ainsi, les utilisateurs auront un seul couple adresse/password pour se connecter à tout (Session sur le domaine, OWA, Portail O365 pour télécharger les logiciels etc).

Préparer l’AD local pour la synchro

Pour synchroniser un Active Directory local avec les services Azure Active Directory, il faut commencer par préparer l’AD local (notamment étendre le schéma AD sur un serveur Windows 2012). Cette page de Microsoft détaille beaucoup plus la précédure.

Il faut récupérer une installation d’Exchange 2013, par exemple sur cette page de chez Microsoft. On la décompresse, on lance cmd puis la commande suivante :
Setup.exe /PrepareSchema /IAcceptExchangeServerLicenseTerms

Une fois que le schéma est préparé, on peut identifier les incohérences dans l’annuaire avant de synchroniser avec O365. Pour ça, on utilise l’outil IdFix (DL). Dans le cas où une offre dediée à O365 a été souscrite, il faut aller dans les paramétres et choisir “Dedicated” au lieu de “Multi-tenants”. On clique sur Query, on le laisse chercher, on vérifie puis acccepte les modifications, on fait Apply et on voit ce que ça donne. Si tout va bien, on peut passer à la synchro avec Azure. Si il y’a des problèmes (par exemple attributs non-existants), revérifier que l’AD a bien été préparé tel qu’indiqué sur le tuto de Microsoft.

Mise en oeuvre Azure AD Connect

Télécharger AAD Connect. La dernière version à prendre en charge Windows Server 2012 R2 est la 1.6.16.

Synchronisation du hachage de mot de passe.
Utilisé l’UPN (userPrincipalName) comme nom d’utilisateur AAD.

Powershell

Pour charger le module :
Import-Module ADSync
ou si ça ne fonctionne pas :
Import-Module -Name "C:\Program Files\Microsoft Azure AD Sync\Bin\ADSync" -Verbose

Une fois installé et configuré, il est possible de synchroniser manuellement avec la commande PowerShell :
start-adsyncsynccycle -policytype delta

Vérification de la synchro

Les utilsateurs et groupes doivent apparaître dans le centre d’admin Office.
On peut aussi vérifier explicitement ici :
https://admin.microsoft.com/#/dirsyncmanagement

10 Oct 2017, 00:00

Élements de démarrage sous OSX

Préférences système -> Utilisateurs -> Ouverture

/Library/LaunchAgents et ~/Library/LaunchAgents

/Library/StartupItems

/Library/LaunchDaemons

/var/db/launchd.db/

Pour consulter : launchctl list |more

14 Sep 2017, 00:00

Carte SD non reconnue si branchement à chaud

J’ai sur ma tour un lecteur de carte SD USB qui, depuis Stretch, ne monte plus automatiquement les cartes SD à la volée. Celles-ci sont bien lisibles lorsqu’elles sont déjà insérées lors du boot, mais l’ejection du media est définitive.

La solution, trouvée ici est d’ajouter le paramètre suivant à la ligne GRUB_CMDLINE_LINUX_DEFAULT= du fichier /etc/default/grub :
GRUB_CMDLINE_LINUX_DEFAULT="block.events_dfl_poll_msecs=2000"

Il faut ensuite lancer sudo update-grub pour actualiser le fichier de conf.

Si on veut appliquer le changement sans rebooter, on peut aussi entrer le paramètre 2000 au fichier /sys/module/block/parameters/events_dfl_poll_msecs

31 Aug 2017, 00:00

Identifier si une session est ouverte sous Wayland ou X11

Il suffit de taper la comande suivante : loginctl show-session $XDG_SESSION_ID -p Type

13 Mar 2017, 00:00

Installer Windows 8.1 x64 sur un disque externe USB3

Le tuto suivant a pour but d’installer Windows 8.1 sur un disque externe. En effet, bien que ce soit impossible via une install traditionnelle (par DVD ou clé USB), il est possible de déployer une install Windows sur un disque externe via l’utilitaire DISM, et le disque acceptera alors de booter.

Il est probable, mais non testé, que ce tuto fonctionne avec Windows 10, et il est adaptable pour Windows 7 (avec l’utilitaire Imagex.exe au lieu de DISM).

Prérequis :

  • Un DVD d’install de Windows 8.1 x64 (ou une image montée)
  • Un disque externe USB3 (ce devrait fonctionner en USB2, mais nous perdons beaucoup, beaucuop de performances). TOUTES LES DONNÉES PRÉSENTES SERONT EFFACÉES
  • Un système Windows 8.1 x64 en cours de fonctionnement

Etapes (penser à adapter les lettres des commandes si nécessaire) :

  • Commencer par monter le DVD d’install de Windows 8.1 x64. Dans mon exemple, il sera monté sur le lecteur G:
  • Lancer une invite de commande en tant qu’administrateur
  • Dans mon cas, j’ai un DVD qui contient à la fois l’édition Core et Pro. Il faut commencer par identifier les index de ces éditions via la commande
    dism /get-wiminfo /wimfile=G:\sources\install.wim
    Souhaitant installer la version Pro, j’utiliserai l’index 1.
  • On lance ensuite la commande diskpart pour partitionner le disque externe.
  • Avec
    list disk
    on identifie le bon disque. Dans mon cas, c’est le disque 1. D’où :
    select disk 1
    puis
    clean
    qui va supprimer toute la table de partition.
  • On crée une partition de boot en FAT32, ayant l’avantage d’être accessible aussi pour les Mac :
    create partition primary size=350
    puis
    format fs=fat32 quick
  • On la rend bootable via
    active
    puis on lui donne une lettre via
    assign letter=B
  • On crée la partition contenant le système Windows lui-même :
    create partition primary
    puis
    format fs=ntfs quick
    puis
    assign letter=Z
  • On quitte Diskpart via exit.
  • On va ensuite déployer l’image Windows sur la aprtition assignée en Z via
    dism /Apply-Image /ImageFile:G:\sources\install.wim /Index:1 /ApplyDir:Z:\
    Adapter l’index repéré précedemment. Cela devrait mettre quelques minutes, puis apparaîtra le message “L’opération a réussi”.
  • On copie les fichiers de démarrage via
    bcdboot Z:\Windows /s B: /f all
    Le paramètre /f sert à spécifier le type de démarrage. Avec ALL, on install aussi bien un boot BIOS qu’un boot UEFI.

Il n’y a plus qu’à démarrer sur le disque externe ! (en espérant que le BIOS/UEFI de votre pc soit suffisamment clair et souple pour permettre le démarrage sur n’importe quel disque, y compris externe, ce qui n’est pas toujours gagné…)

Sources : Article sur Slice42 et article sur Bleeptobleep

06 Dec 2016, 00:00

Mise en veille de l'écran récalcitrante

Il arrive, sous Linux, particulièrement après une install neuve ou bien une upgrade du système, que l’écran se mette en veille au bout d’un certain temps d’inactivité, quand bien même l’économiseur d’écran et l’extinction d’écran sont désactivés. Ceci est dû à la fonction DPMS de l’écran, qui se gère de manière distincte des 2 réglages précédents.

Pour la gérer, on utilise le programme xset. Pour sonder les paramètres actuellent en usage, on utilise xset q. Il est assez probable que les lignes suivantes apparaissent :

DPMS (Energy Star):
  Standby: 600    Suspend: 600    Off: 600
  DPMS is Enabled
  Monitor is On

Si on souhaite simplement désactiver dpms, il suffit de lancer xset -dpms, et les soucis de mise en veille intempestive de l’écran devraient disparaître ! Il est bien sûr possible de gérer les paramètres plus finement avec la commande xset.

06 Dec 2016, 00:00

Trouver des fichers en direct download grâce à google

Il suffit de faire une recherche google de ce type :

"nom a chercher" -inurl:(htm|html|php) intitle:"index of" +"last modified" +"parent directory"

Si on trouve une adresse intéressante, il suffit ensuite de lancer

wget -c -r --no-parent http://adresse-interessante.com/folder/

pour récupérer l’ensemble des fichiers (avec un peu de tri à faire)

18 Sep 2016, 00:00

Recherche et suppression de doublons avec fdupes

Suite à un usage parallèle et complètement désorganisé de 2 disques (appelés ici arbo1 et arbo2), ces derniers contiennent en gros les mêmes données, mais la version la plus récente d’un document peut se trouver dans arbo1 ou dans arbo2.

Je souhaite donc, pour simplifier le travail de fusion de ces 2 dossiers (et mise en place d’une sauvegarde correcte ;) )à supprimer tous les fichiers de l’arborescence 2 qui sont déjà existants et identiques dans l’arborescence 1.

La première étrape va consister à s’assurer qu’il n’y ait aucun doublon dans l’arbo1 elle-même, puis dans l’arbo2 elle-même. Nous utiisons pour ça fdupes, inclus dans les dépôts Debian, qui liste les fichiers dupliqués via vérification md5.

D’abord, nous les listons :

fdupes -r ./arbo1

Selon la quantité de doublons nous pouvons choisir la version à conserver à la main, via le paramètre -d, ou bien supprimer le prompt et ne garder que la “première” occurence, en ajoutant l’option -N. Par exemple, pour ne pas s’embeter :

fdupes -rdN ./arbo1

Nous faisons la même opération dans l’arborescence 2

fdupes -rdN ./arbo2

Ainsi, nous sommes sûrs que s’il reste des fichiers dupliqués, il y aura au moins une occurence du fichier dans chacune des arborescences, les doublons locaux étant supprimés. Nous allons donc pouvoir utiliser fdupes sur les 2 arborescences en même temps, et supprimer automatiquement celles situées dans arbo2. J’ai préféré utiliser grep avec le chemin souhaité pour isoler les fichiers à supprimer, plutôt que d’utiliser le paramètre -f qui considérait comme “première occurence” un coup un fichier de arbo1, un coup un ficher de arbo2.

D’abord on liste uniquement les fichiers situés dans arbo2 (mais qui existent à l’identique dans arbo1 ) :

fdupes -r ./ | grep './arbo2'

Les guillemets simple autour de arbo2 permettent de gérer si le dossier comporte un espace.

Enfin, nous pouvons les piper avec la commande rm, via l’intermédiaire de read qui permet de prendre en compte les noms de fichier/dossier contenant des espaces :

fdupes -r ./ | grep './arbo2' | while read f; do rm "$f"; done

Ainsi, tous les fichiers subsistants dans “arbo2” sont des fichiers uniques, n’existant pas dans arbo1, ou bien pas à la même version, et qu’il faudra donc trier manuellement (en tout cas dans le cas ci-présent d’absence totale d’organisation).
Pour simplifier ce tri, on peut également supprimer tous les répertoires vides de arbo2 via cette commande :

find './arbo2/' -type d -empty -print -delete

18 Sep 2016, 00:00

Utilisation de ddrescue pour dumper un disque en train de lâcher.

GNU ddrescue est un utilitaire conçu pour dumper intelligemment des disques ou partitions (ou autres périphériques de bloc), en sautant de zone, repartant de la fin du disque lorsqu’il rencontre une erreur ou des zones lentes, et y revenant plus tard, lorsque les secteurs encore lisibles ont été récupérés. Ce paragraphe de la page de man explique en détail l’algorithme utilisé (trimming, scraping etc).

Je dois beaucoup de ma compréhension du logiciel à ce très bon thread sur linuxfr

On commence par installer le soft, et l’interface graphique qui permet de surveiller l’avancement, avec des jolis petits carrés de couleur.

sudo aptitude install gddrescue ddrescueview

On réfléchit à si on souhaite dumper le disque complet, ou bien une partition. Dans cet exemple, une partition. Le support qui recevra le dump doit bien sûr être plus gros que le support source.

Première passe :

sudo ddrescue -n -f -b 512 /dev/sdi1 ./file.img mapfile

L’option -n dit à ddrescue de ne pas scraper les secteurs qu’il n’arrive pas à lire. Si j’ai bien compris, ça permet en gros de ne pas s’acharner maintenant sur ce qui n’est pas lisible.
L’option -f est inutile ici, car on écrit dans un fichier. Elle est cependant nécessaire si l’output est un block device (disque ou partition), c’est un garde-fou pour éviter d’écraser une partition par erreur.
L’option -b sert à spécifier la taille physique de secteurs du dique. C’est souvent 512, et c’esla valeur par défaut, mais il faut vérifier sur le disque en question (fdisk -l).
Le journal de la récupération est écrit dans le fichier mapfile précisé (on peut mettre le nom qu’on souhaite).

Si on veut cibler la récupération de données, par exemple si on a peu de données sur un gros disque, et qu’on suspecte qu’elles soient au début du disque, on peut spécifier une position de départ avec -i et une taille à couvrir par la recherche avec l’option -s. Par exemple :

sudo ddrescue -n -f -b512 -i0 -s30GiB /dev/sdi1 ./file.img mapfile

pour forcer le départ du début du disque et ne tester que les 30 premiers gibioctets.

On peut surveiller l’avancement grace à ddrescueview, si on ouvre mapfile.

Une fois que c’est fini, on lance la 2ème passe :

sudo ddrescue -d -r -1 -f /dev/sdi1 ./file.img mapfile

L’option -d dit à ddrescue d’utiliser des accès directs au disque, en shuntant le cache du noyau, permettant dans certains cas une meilleure lecture. L’option -r -1 dit à ddrescue d’essyer indéfiniment la lecture sur les secteurs qu’il n’arrive pas à lire, avant de passer au suivant. On peut aussi passer un entier positif en argument, pour un nombre de fois (par exemple -r3).
Lors de cette phase, les secteurs seront “scrapés”, permettant soit leur récupération, soit leur classement en secteurs defectueux.

Durant la récupération de donées qui sert de support à cet article, j’ai été conronté à un autre problème : bien que toujours branché et detecté par l’OS (sdi), le disque s’est complètement arrêté de répondre. J’avais donc récupéré environ 100 Go de la partition, dont quelques secteurs en état “non-trimmed”, mais les 400 Go restant ont été classés d’office “failed”, chouette surprise au réveil.
Après avoir débranché le disque, l’avoir laissé reposer quelques minutes, je l’ai branché et il est redevenu lisible. Dans le but de limiter les accès, j’ai voulu conserver les 100 Go de données récupérées, tout en forçant ddrescue à repasser sur les zones marquées “failed”. Le paramètre -M sert dans ce cas, en marquant les blocs “failed” comme “non-trimmed”, et ils seront donc relus lors du processus. Ça donne :

sudo ddrescue -M -n -f /dev/sdi1 ./file.img mapfile

On peut aussi utiliser le paramètre -A, qui marque tous les blocs qui n’ont pas été lus avec succès comme “non-tried”. Ceci aurait cependant fait relire les secteurs sur lesquels il avait déjà buté avant que le disque arrête de répondre et qui avaient été marqués “non-trimmed” à raison.

Enfin, j’ai eu le cas d’un disque qui avait très peu de secteurs défectueux, mais dont la lecture était extrêmement lente, entre 6 et 10ko/s, probablement à cause de défaillances électroniques. Suite à la lecture de ce post, j’ai pu réduire le timeout et le error-handling timout du disque grâce aux commandes suivantes, en root :

echo 1 > /sys/block/<deviceName>/device/timeout
echo 1 > /sys/block/<deviceName>/device/eh_timeout

Ce qui m’a fait passer à une moyenne de 30ko/s, avec seulement 10 jours de récupération de données :D

14 Sep 2016, 00:00

Packages utiles après install Jessie
# environnement de bureau 
lightdm mate-desktop-environment simple-scan system-config-printer caja-open-terminal network-manager-gnome pulseaudio pavucontrol paprefs ffmpegthumbnailer

# utils
sysvinit-core  # pour se passer (en bonne partie) de systemd
hplip firmware-realtek firmware-ralink firmware-brcm80211 firmware-linux anacron firmware-iwlwifi firmware-samsung python-gpgme gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly ntfs pepperflashplugin-nonfree ttf-mscorefonts-installer unrar libmp3lame0 lame build-essential linux-headers-amd64

# softs
libreoffice libreoffice-l10n-fr chromium chromium-l10n pepperflashplugin-nonfree wine vlc asunder clementine gparted