Note: Archlinux Secureboot/EFI et syslinux

Si comme moi vous n'avez pas la possibilité d'installer grub sur votre archlinux (ici sur un HP EliteBook 830G5, grub ne fonctionnait pas du tout) et que vous êtes amené à installer syslinux, celui-ci pour fonctionner au démarrage en UEFI doit se trouver dans /boot/efi/EFI/syslinux et non dans /boot/syslinux

Le problème rencontré est que syslinux déclare appelle initramfs et vmlinuz par des chemins relatifs par défaut: ../ ce qui pose problème quand il y a une mise à jour du noyau, puisque le noyau trouvé est dans /boot/efi/EFI et mkinitcpio met à jour les images dans /boot et que l'on se retrouve avec une machine qui ne démarre plus.

Deux méthodes existent pour palier à ce problème:

La première plus simple (et logique) est de modifier le fichier de configuration de syslinux présent dans /boot/efi/EFI/syslinux/syslinux.cfg

...
LINUX ../../../vmlinuz-linux
...
INITRD ../../../initramfs-linux.img

C'est moche mais ça fonctionne.

La seconde méthode est plus "fun":
Sous Archlinux, quand on utilise pacman, l'installeur de package, celui-ci offre la possibilité de lancer des traitements à la fin des installations, mises à jour ou suppression de paquets, ils sont appelés hooks
Ce qui est très pratique et sympathique.

Des hooks système sont déjà utilisés, on les voit à la fin du traitement de pacman sous forme de (5/23 ...) par exemple.
Ils sont disponibles dans /usr/share/libalpm/hooks/

Il est possible d'ajouter des hooks personnalisés dans /etc/pacman.d/hooks/ ou des répertoires personnels, mais ce n'est pas le propos ici.

Quand nous regardons les hooks systèmes, il y en a un qui nous intéresse particulièrement: 90-linux.hook
Ce hook sert à mettre à jour l'image noyau du boot via la commande mkinitcpio -p linux lors d'une installation/mise à jour du noyau linux.

De ce fait, il suffit de copier ce fichier dans /etc/pacman.d/hooks/ sous les formes:

97-vmlinuz.hook
98-initramfs.hook
99-initramfs-fallback.hook

et les modifier comme suit:

97-vmlinuz.hook
[Trigger]
Type = File
Operation = Install
Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz
Target = usr/lib/initcpio/*

[Action]
Description = Copying vmlinuz-linux from /boot to /boot/efi/EFI to prevent boot problem with syslinux...
When = PostTransaction
Exec = /usr/bin/cp /boot/vmlinuz-linux /boot/efi/EFI/
98-initramfs.hook
[Trigger]
Type = File
Operation = Install
Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz
Target = usr/lib/initcpio/*

[Action]
Description = Copying initramfs from /boot to /boot/efi/EFI to prevent boot problem with syslinux...
When = PostTransaction
Exec = /usr/bin/cp /boot/initramfs-linux.img /boot/efi/EFI/
99-initramfs-fallback.hook
[Trigger]
Type = File
Operation = Install
Operation = Upgrade
Target = usr/lib/modules/*/vmlinuz
Target = usr/lib/initcpio/*

[Action]
Description = Copying initramfs from /boot to /boot/efi/EFI to prevent boot problem with syslinux...
When = PostTransaction
Exec = /usr/bin/cp /boot/initramfs-linux.img /boot/efi/EFI/

Les déclarer en 97 98 99 vont permettre de ne les exécuter que quand mkinitcpio a fait son travail.
Garder le [Trigger] identique ermet de ne l'exécuter que quand il y a un changement de noyau.

Personnellement, j'ai choisi d'utiliser les deux méthodes, ainsi, si pour une raison ou une autre, j'ai du réinitialiser mon syslinux et que j'ai oublié la modification, cela ne posera pas de problème.

Sources:
pacman - ArchWiki
alpm-hooks

Permalink

Note: Archlinux luks SSD et trim

Ajouter l'option allow-discards à l'appel de la partition chiffrée dans les options de boot du gestionnaire de démarrage.
(Ne dispense pas d'activer le trim automatique)

Ici avec grub:

vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="...cryptdevice=UUID...system:allow-discards root=...

Puis regénérer le fichier de configuration grub:

grub-mkconfig > /boot/grub/grub.cfg

Si utilisation du système de fichier ext4, ajouter l'option de trim automatique pour chaque point de montage chiffré:

tune2fs -o discard /dev/mapper/myVG-root
tune2fs -o discard /dev/mapper/myVG-home

Permalink

Note: Archlinux luks et clavier français au dévérrouillage de la partition /

Éditer /etc/mkinitcpio.conf pour ajouter / déplacer avant encrypt les hooks keyboard et keymap

HOOKS=(... keyboard keymap encrypt ...)

Permalink

Étape 6 : déploiement de système d’exploitation et mises à jour des fonctionnalités | Microsoft Docs

Documentation pour une mise à jour progressive du parc informatique Windows10.
Permalink

Préparation d'un hôte Hyper-V sur Windows Server 2016 Standard

1) Installation
2) Paramétrage réseau
3) Ajout de la licence: slmgr /ipk XXXX-XXXX-XXXX-XXXX
4) Activation de la licence: slmgr /ato
5) Ajout dans le domaine en cours (pour l’administration à distance)
6) Ajout de la fonctionnalité Hyper-V Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
7) Ajout des règles de pare feu d'administration à distance (en power shell): Enable-PSRemoting
8) Préparation du disque de données:

diskpart
list disk
select disk 1
create partition  primary
list partition
select partition 1
format fs=NTFS quick
assign letter=D

9) Se rendre sur le disque D pour y créer les répertoires nécessaires:

cd /d d:\
mkdir hyper-v
mkdir isos

10) Se connecter avec un gestionnaire Hyper-V distant dans le même domaine et finir les réglages:
-> Changer les répertoires par défaut des machines et disques durs virtuels de C: vers D:
-> Créer un commutateur virtuel externe pour que les machine virtuelles puissent communiquer sur le réseau.
Permalink

Windows 10 remplacer le fond d'écran de connexion

Parce qu Windows 10 est toujours compliqué à gérer en entreprise, que l'option du changement classique de l'écran de connexion/verrouillage ne fonctionne pas après un sysprep et que la GPO non plus depuis la 1803, voici la procédure à suivre pour permettre de personnaliser cet écran directement via le master:

  1. Démarrer le PC sur un live CD (ici, Linux),

  2. Monter la partition Windows 10:
    mount /dev/sdaX /your/path

  3. Se rendre dans le dossier qui contient le fond d'écran actuellement utilisé:
    cd /your/path/ProgramData/Microsoft/Windows/SystemData/S-1-5-18

  4. Renommer / supprimer les images présentent dans le dossier (je préfère les renommer pour revenir à une situation par défaut si nécessaire):
    mv LockScreen__1920_1080_notdimmed.jpg LockScreen__1920_1080_notdimmed.jpg.old

  5. [Facultatif] Copiez votre fond d'écran du nom de la ou des images précédentes dans le meme dossier,

  6. Se rendre dans le dossier /your/path/Windows/Web et copier le dossier Screen (idem ici, je préfère garder le dossier par défaut):
    cp -R Screen Screen.default

  7. Copiez votre fond d'écran avec le nom du premier fond d'écran img100.jpg dans Screen (ou de tous, si vous ne souhaitez pas que les utilisateurs puissent le changer).
    Pour tous les fonds:

    cd Screen
    for i in $(ls)
    do
    cp /path/to/background/yourBackground.jpg ${i}
    done
  8. Redémarrez le PC et... Voilà !

Source

Permalink

Installer Windows 10 via l'ISO sur un Dell avec Intel Optane.

  1. Télécharger les pilotes Intel Optane f6flpy-x*.zip,
  2. Les décompresser sur une clé USB,
  3. Insérer cette clé sur la nouvelle machine,
  4. Démarrer la machine et appuyer sur F12 pour la sélection du Boot,
  5. Choisir Devices configuration et réinitialiser le disque dur ainsi que le Intel Optane,
  6. Démarrer le média d'installation de Windows 10,
  7. Choisir l'installation avancée,
  8. Avant de toucher aux partitions, choisir l'option "charger un pilote" et allez recherche le pilote Intel Optane sur la seconde clé,
  9. Ceci fait, vous n'aurez pas le choix du partitionnement, c'est un disque EFI et un principal (c'est un RAID),
  10. Lancer l'installation, tout devrait se dérouler normalement.
    Permalink

Windows 10 en entreprise, du WTF et un allégorie

Depuis 1 mois, je m'acharne à intégrer Windows 10 en entreprise.

En effet, celui-ci bien que marqué "Professionnel" en est loin, très loin. Chaque mise à jour provoquant sont lot de bugs et d'incompréhensions.

Je n'avais que 16 machines sous Windows 10 dans mon parc, et jusqu'ici tout fonctionnait (à peu près) bien, pourvu que l'on paramètre les bonne GPO au sein de l'Active Directory pour désactiver le démarrage rapide et modifier les droits d'accès aux chemins UNC de sysvol.

Bref, en mars, je passe ces 16 postes en 1803, malgré mon appréhension au vu des articles sur Internet.

Le premier bug

La mise à jour se passe correctement, mais les PC mettent 20 minutes à démarrer, la recherche dans le menu démarrer ne fonctionne pas Ça m'énerve, mais ne voyant pas ou ça pêche, je met ça sur le compte de machine peu performantes.
Je préviens les collègues qui travaillent dessus et la salle ne démarrant qu'à 9h, ceux-ci tous les matins démarrent les machines en avance afin que les stagiaires ne soient pas impactés. Au moins le temps de renouveler cette partie de parc (ces machines seront mises en spare).

4 mois plus tard, je renouvelle une nouvelle partie du parc. Moi, confiant, je prépare la première machine et la teste en l'intégrant dans le domaine.
Je demande à la personne bénéficiaire de la tester, tout fonctionne bien.
Elle démarre le PC, 20 minutes à démarrer. Je met ça sur le compte du premier démarrage dans le domaine.
Elle se connecte, lances ses applications, la recherche du menu démarrer toujours down, je me dit que c'est une GPO qui déconne.
1h plus tard, elle lance son application métier, celle-ci ne fonctionne pas, ou alors, très lentement, 20 minutes pour se connecter, 20 minute pour lancer une commande.
Je teste sur le compte admin, elle fonctionne bien.
Après plusieurs redémarrage suite à des tests de GPO, je constate que le problème des 20 minutes au démarrage est le même que sur les autres postes.
Je check mes GPO et désactive l'option d'attendre le réseau. Le poste met quelques secondes à démarrer ! Youpi ! Mais non.
C'est le login qui met 10 minutes maintenant... Fail. Poste inutilisable, je le récupère.

Après avoir retravaillé toutes mes GPO, vérifier la doc Microsoft, les forums. Rien y fait, les 20 minutes d'attente sont toujours là d'une façon ou d'une autre ! J'enrage !

Enième recherche, je découvre que c'est un bug avec les systèmes OEM (honte à moi de ne pas installer une version clean) et les Windows10 >= à la 1709.
Un obscure conflit de clés de registre et autres fichiers. Il faut appliquer 2 correctifs Microsoft en conjonction avec 1 correctif constructeur.
HP propose bien ce correctif, mais pas Dell.
Je tente donc une installation à partir d'une ISO de mon compte OVS, intégration au domaine et... Démarrage et login normal ! Chouette !

Deuxième bug

Je met dit que le problème est résolu et teste donc l'application métier... Fail ! Inutilisable.

Je check donc mes GPO, teste en déactivant tout, toujours le même problème. Test avec des droits administrateur: ça fonctionne (mais ce n'est pas une solution acceptable).
Je constate que la recherche Windows est toujours HS ainsi que l'accès aux paramètres et autres réglages.
Je tente une énième recherche sur Internet et trouve que je suis loin d'être le seul à être concerné par ce problème:

  • Depuis la version 1803, quand on intègre Windows 10 dans un domaine, si l'utilisateur n'est pas administrateur local du poste, le menu démarrer ne fonctionne pas correctement, ainsi que l'accès aux paramètres et certaines applications.
    Pas de solution de Microsoft, rien nada !

Je tente tout ce que je trouve de safe. Rien ! Ne fonctionne pas.

En bas de ce thread je tombe sur ce message pour le moins farfelu:

This issue has popped up again in 1803

We did find the fix was to delete the profile for the local administrator and magically everything started to work as it should.

N'y croyant, je tente la chose en désespoir de cause. Je supprime donc le profil d'administrateur local...

Je redémarre le PC, connecte l'admin du domaine, qui met 10 minutes... Mais ensuite se connecte normalement.
Je connecte le compte du salarié, teste le menu démarrer... Tout fonctionne ! Je teste l'application métier: OK, je teste l'accès aux paramètres: OK.

C'est du grand n'importe quoi ! En quoi le profil local administrateur peut jouer sur un profil réseau d'utilisateur !!!

L’allégorie

Parce qu'il fallait bien que j'explique l'absurdité de la chose à ma collègue qui n'est pas informaticienne, voici l’allégorie que j'ai utilisé:

Imagine habiter dans un lotissement, mis en œuvre par un constructeur. Tu as du mal à ouvrir ta maison, et quand tu es dedans rien ne fonctionne.

Tu appelle les artisans qui ne comprennes pas. Personne peu résoudre ton problème.

Un jour un artisan arrive et t'explique qu'il déjà rencontré ça. Dans un autre lotissement du même constructeur. Les maisons avaient le même problème. Un jour, à bout de nerf, détruit la première de ces maisons qui a été construite (il était vraiment énervé). Le lendemain, les habitants découvrent avec stupéfaction que leurs maison fonctionnent maintenant à merveille !

Tu teste toi même et détruit la maison du voisin. Et la tes problèmes ont disparus !

C'est complètement WTF !
Permalink

Note: L'installation du package AUR php-pear échoue

Il faut modifier le PKGBUILD et remplacer:

rm -rf ${pkgdir}/usr/share/pear/.{channels,depdb,depdblock,filemap,lock,registry}

par

rm -rf ${pkgdir}/.{channels,depdb,depdblock,filemap,lock,registry}

Il semble que le problème soit récurrent avec ce paquet AUR:
https://aur.archlinux.org/packages/php-pear/
Permalink

Sysprep de windows 10 sur pc portable, les WTF de windows 10

Préparation d'une image sysprep de windows 10, backup via clonezilla d'un PC portable.

Déploiement sur 3 pc de test, OK.

Déploiement dans la salle (16 machines), la moité a la carte réseau en rade, soit connexion limitée, soit carte down avec dans les deux cas impossibilité de la faire fonctionner. Que ce soit avec netsh ou redémarrage complet.

Quand la machine est sur clonezilla, cette même carte fonctionne, avec plusieurs machines et tests, même résultat. Sous Linux OK, sous windows, carte marquée "matériel débranché".

Je me dit que c'est mon image sysprep sur le réseau qui a un problème. Je tente en local avec le HDD sur lequel est l'image de base, ça ne règle pas le souci.

Je commence à voir rouge.

Après plusieurs heures de différents tests, je décide en dernier recours d'éteindre le PC portable, de le débrancher du secteur, de retirer la batterie puis de vider l'énergie résiduelle.

Redémarrage du PC: carte réseau OK.

Test sur les autres PC: cartes réseau OK.

Les voies de windows 10 sont impénétrables.
Permalink

Redéployer une image de Windows 10 d'un PC déjà installé avec Sysprep

1) Nettoyer l'image:

  • Supprimer tous les bloatwares et logiciels indésirables, ajoutés par le constructeur,
  • Supprimer les applications du Windows store pour l'utilisateur en cours:
    Ouvrir une console powershell en mode administrateur, exécuter les commandes suivantes[1][2][3]:
    Set-Executionpolicy Unrestricted
    Get-AppxPackage -Allusers | Remove-AppxPackage

  • Supprimer les application pré installées (celles qui s'installent à chaque nouvel utilisateur):
    Get-AppxProvisioned-Package -Online | Remove-ProvisionedAppxPackage -Online

  • Si à ce stade des applications apparaissent toujours et ne sont pas disponibles ni par le store ni par les programmes classiques (des URL par exemple) c'est que les raccourcis se trouvent dans:
    %programdata%\Microsoft\Windows\[start|Menu démarrer]\[Startup|Démarrage]

  • OneNote a normalement été désinstallé, mais apparait toujours dans l'explateur de fichiers, pour le supprimer, un passage par le registre est obligé. Il faut passer la clé suivante à 0[4]:
    HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\System.IsPinnedToNameSpaceTree

    Et pour un système 64bits, la clé suivante en plus:
    HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\System.IsPinnedToNameSpaceTree

2) Personnaliser la session en cours, qui servira de profil de base pour les nouvelles

  • Faire quelques réglages au niveau de la base

    Par exemple pour un OS d'entreprise, pour prévenir les problèmes d'accès à SYSVOL et NETLOGON (un bug non résolu sur windows 10) il faut créer les clés suivantes:
    HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\NetworkProvider\HardenedPaths
    Type REG_SZ nom de la clé: \\*\SYSVOL valeur RequireMutualAuthentication=0, RequireIntegrity=0, RequirePrivacy=0
    Type REG_SZ nom de la clé: \\*\NETLOGON valeur RequireMutualAuthentication=0, RequireIntegrity=0, RequirePrivacy=0

  • Idem pour être sur de bien appliquer toutes les GPO ordinateur, il faut désactiver le démarrage rapide:
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Power Type REG_DWORDnom de la clé:HiberbootEnabledvaleur0```

  • D'autres sont possibles, comme désactiver la télémétrie par exemple:
    HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\DataCollection
    Type: REG_DWORD nom AllowTelemetry`` Valeur0 Avec une invite de commande en administrateur: sc delete DiagTrack echo "" > c:\ProgramData\Microsoft\Diagnosis\ETLLogs\Autologger\utoLoggerDiagTrack-Listener.etl sc delete dmwappushservice```

3) Création du fichier de réponse:

Il faut se munir de l'outil de Microsoft ADK[5], le plus important étant de ne pas oublier l'option copyprofile dans le noeud "specialize" afin de copier votre profil paramétré en profil apr défaut pour les futurs utilisateurs.
Personnellement je n'ai jamais réussi à faire un installation complètement OOBE malgré un réglage complet de la langue à l'utilisateur.
Concernant l'activation automatique, si la licence est classique alors il n'y a pas de problème. Il faut utiliser la même méthode d'activation dans le unattend.xml que pour Windows 7.

4) Lancement du sysprep:

Il faut d'abord copier le fichier unattend dans le répertoire %windir%\System32\Sysprep puis lancer le sysprep dans une invite de commande:
sysprep.exe /generalize /oobe /shutdown /unattend:unattend.xml

Si rien ne se passe ou qu'une erreur est rencontrée, il faut regarder les logs de sysprep dans le répertoire "Panther" dans sysprep[6]. Si l'erreur est liée à une app installée pour un utilisateur il faut s'assurer qu'il n'y ai pas d'application qui traine avec les commandes powershell vues plus haut. Il faut aussi vérifier qu'il n'y ait pas de "compte inconnu" dans les paramètres système avancés > gestion des utilisateurs. Si c'est le cas, il faut les supprimer puis relancer le sysprep.

5) Récupérer l'image du disque dur:

Comme à mon habitude j'utilise CloneZilla qui est très efficace pour ça.

1 Sysprep Windows 10 Machine: Step by Step Guide
2 [Guide] How to Remove All Built-in Apps in Windows 10
3 Remove provisioned (built-in) apps in Windows 10
4 How to Disable OneDrive and Remove It From File Explorer on Windows 10
5 Download and install the Windows ADK
6 Create mandatory user profiles
Permalink

Note: Récupérer la clé de licence Windows en ligne de commande

wmic path SoftwareLicencingService get OA3xOriginalProductKey
Permalink

Zabbix Share - HWg-STE probe

Je viens de partager le template Zabbix du capteur de température HWg-STE.
Je l'ai créé avec Zabbix 3.4.
Ses fonctionnalités:

  • Indication de la température de la salle,
  • Déclencheurs: alerte, moyen, élevé, désastre à respectivement > 23°, > 25°, > 29°, > 33°,
  • Graphique de température.
    Permalink

Find, rechercher un dossier dans une arborescence avec le minimum de ressources

Récemment j'ai eu besoin de supprimer deux répertoires nons utiles à des emplacements très précis d'un serveur de sauvegarde rsnapshot (avec hardlink), non seulement ces répertoires avaient des nom tellement communs qu'il pouvait avori de faux positifs (et supprimer des répertoire à garder) mais en plus avec le nombre de sauvegardes, cela aurait été très long de le faire à la main.

Mais Comme avec Linux il y a toujours une solution à tout et que find est très complet et performant, voici la petite commande qui va bien:

find /path/to/search -maxdepth nb -ipath "*sub/sub/sub*"

-ipath: permet de ne prendre en compte que les dossier/sous dossier qui on comme répertoire parents la chaine indiquée.
-maxdepth: permet de ne pas chercher au delà de nb sous répertoires,

Pour accélerer la recherche on peut aussi ajouter -mindepth nb ainsi on ne recherche que à partir de nb sous répertoires.
Permalink

issue with rsnapreport.pl when I upgraded to 1.4.2-2 · Issue #172 · rsnapshot/rsnapshot · GitHub

Si sous une distribution RPM like vous utilisez rsnapshot avec rsnapreport.pl.

Quand vous passez de la 1.3 à la 1.4 vos stats ne fonctionnent plus, c'est du à une modification de rsnapreport.pl.

Pour corriger il faut faire:

cp /usr/share/doc/rsnapshot-1.4.2/utils/rsnapreport.pl /usr/local/bin/

Et ensuite passer l'option verbosity de 3 à 4 dans vos fichiers de configuration de rsnapshot.
Permalink

Kaspersky Anti Ransomware Tool for business - Installation silencieuse

Voici la petite commande qui va bien pour l'installer de façon silencieuse (à adapter avec votre email, !Je n'ai pas mis les flag d'authentification du serveur smtp):

kaspersky_anti_ransomware_tool_for_business_1.1.24.0_en.msi" /q /norestart CONNECTION_SECURITY=No AGREETOEULA=1 IS_ADMIN=0 USER=user ADMIN_EMAIL=admin@your.email SENDER_EMAIL=client@your.email SMTP_SERVER=mail.your.email SMTP_PORT=25 ALLUSERS=1 SELFPROTECTION=1
Permalink

Installation de Kolab Groupware3.3 sur une CentOS 7

Sommaire

Convention

  • Le plan d'adressage réseau sera 192.168.1.0/24,
  • L'adresse IP du serveur mail est 192.168.1.1,
  • Le FQDN du serveur est mail.kolab.local,
  • Un serveur DNS (le cas échéant dans le fichier host), le FQDN pointe sur l'adresse IP du serveur, c'est très important.

Préparation de la CentOS

Repositories

Pour son fonctionnement, kolab à besoin de paquets qui sont dans le repo epel.
À partir de CentOS 7, un paquet pour installer celui-ci est disponible:

yum install epel-release

Ensuite, il faut ajouter [les dépôt kolab][]:

cd /etc/yum.repos.d/
wget http://obs.kolabsys.com/repositories/Kolab:/3.3/CentOS_7/Kolab:3.3.repo
wget http://obs.kolabsys.com/repositories/Kolab:/3.3:/Updates/CentOS_7/Kolab:3.3:Updates.repo

Ajouter les clés GPG:

gpg --search devel@lists.kolab.org
gpg: searching for "devel@lists.kolab.org" from hkp server pgp.mit.edu
(1) Kolab Development Coordination Mailing List <devel@lists.kolab.org>
    2048 bit RSA key 446D5A45, created: 2014-08-20
Keys 1-1 of 1 for "devel@lists.kolab.org".  Enter number(s), N)ext, or Q)uit > 1

gpg --export --armor devel@lists.kolab.org > devel.asc
rpm --import devel.asc

Selinux

Kolab n'est encore selinux compliant, il faut donc passer ce second en mode permissif:

setenforce 1

Pour le rendre permanent modifier le fichier /etc/selinux/config :

\# This file controls the state of SELinux on the system.
\# SELINUX= can take one of these three values:
\#     enforcing - SELinux security policy is enforced.
\#     permissive - SELinux prints warnings instead of enforcing.
\#     disabled - No SELinux policy is loaded.
*SELINUX=permissive*
\# SELINUXTYPE= can take one of these two values:
\#     targeted - Targeted processes are protected,
\#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Firewalld

Kolab ne paramètre pas le pare feu, [laissant le soin au sysadmin de le faire][]

Grâce à l'arrivée de firewalld sur CentOS, c'est simple de le faire avec la commande firewall-cmd.
Dans notre configuration, étant un serveur mail interne, j'ai pris le partis de travailler sur 2 zones : internal et public:

firewall-cmd --permanent --add-zone=internal
firewall-cmd --reload
firewall-cmd --permanent --zone=internal --add-source=192.168.1.0/24
firewall-cmd --reload

On y ouvre le service ssh pour la zone interne et on la désactive pour la zone public (ainsi que dhcpv6-client ici):

firewall-cmd --permanent --zone=internal --add-service=ssh
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Ensuite on ouvre des ports nécessaires (j'ai ici pris le parti d'utiliser firewalld par port et nom par service, par simple cohérence dans la configuration, vu que tous les port nécessaire n'ont pas de service correspondant dans firewalld):
L'exemple ici est pour internal, mais il est nécessaire de le faire pour public également si vous souhaitez un accès publique vers votre serveur.

firewall-cmd --permanent --zone=internal --add-port=25/tcp
firewall-cmd --permanent --zone=internal --add-port=80/tcp
firewall-cmd --permanent --zone=internal --add-port=110/tcp
firewall-cmd --permanent --zone=internal --add-port=143/tcp
firewall-cmd --permanent --zone=internal --add-port=389/tcp
firewall-cmd --permanent --zone=internal --add-port=443/tcp
firewall-cmd --permanent --zone=internal --add-port=465/tcp
firewall-cmd --permanent --zone=internal --add-port=587/tcp
firewall-cmd --permanent --zone=internal --add-port=636/tcp
firewall-cmd --permanent --zone=internal --add-port=993/tcp

Installation des paquets

Kolab fournit un paquet qui permet d'installer automatiquement tout ce qui est nécessaire kolab. Toutefois, à la date de ce document, celui-ci essaye d'installer mysql-server alors que dans la centOS7, c'est mariadb qui est installé.
De même le script d'installation tentera de démarrer mysqld en lieu et place de mariadb.

Nous allons donc ici installer et lancer mariadb:

yum install mariadb mariadb-server

...

systemctl enable mariadb

Il ne reste plus maintenant qu'à lancer le téléchargement des outils de kolab simplement avec la commande suivante:

yum install kolab

Lancement du script d'installation

setup-kolab

Please supply a password for the LDAP administrator user 'admin', used to login
to the graphical console of 389 Directory server.

Administrator password [THIe0sASidJHmAV]: 

Please supply a password for the LDAP Directory Manager user, which is the
administrator user you will be using to at least initially log in to the Web
Admin, and that Kolab uses to perform administrative tasks.

Directory Manager password [h6CHXdpgVV1FO0m]: 

Please choose the system user and group the service should use to run under.
These should be existing, unprivileged, local system POSIX accounts with no
shell.

User [nobody]: 
Group [nobody]: 

This setup procedure plans to set up Kolab Groupware for the following domain
name space. This domain name is obtained from the reverse DNS entry on your
network interface. Please confirm this is the appropriate domain name space.

groupe-initiatives.com [Y/n]: 

The standard root dn we composed for you follows. Please confirm this is the root
dn you wish to use.

dc=groupe-initiatives,dc=com [Y/n]: 

Setup is now going to set up the 389 Directory Server. This may take a little
while (during which period there is no output and no progress indication).

ln -s '/usr/lib/systemd/system/dirsrv.target' '/etc/systemd/system/multi-user.target.wants/dirsrv.target'

Please supply a Cyrus Administrator password. This password is used by Kolab to
execute administrative tasks in Cyrus IMAP. You may also need the password
yourself to troubleshoot Cyrus IMAP and/or perform other administrative tasks
against Cyrus IMAP directly.

Cyrus Administrator password [GwQqXBjlRfpVFdM]: 

Please supply a Kolab Service account password. This account is used by various
services such as Postfix, and Roundcube, as anonymous binds to the LDAP server
will not be allowed.

Kolab Service password [KfroHBhyEV_XgJP]: 
Failed to issue method call: No such file or directory
ln -s '/usr/lib/systemd/system/amavisd.service' '/etc/systemd/system/multi-user.target.wants/amavisd.service'
The unit files have no [Install] section. They are not meant to be enabled
using systemctl.
Possible reasons for having this kind of units are:
1) A unit may be statically enabled by being symlinked from another unit's
   .wants/ or .requires/ directory.
2) A unit's purpose may be to act as a helper for some other unit which has
   a requirement dependency on it.
3) A unit may be started when needed via activation (socket, path, timer,
   D-Bus, udev, scripted systemctl call, ...).
ln -s '/usr/lib/systemd/system/wallace.service' '/etc/systemd/system/multi-user.target.wants/wallace.service'
Failed to issue method call: Unit mysqld.service failed to load: No such file or directory.
Failed to issue method call: No such file or directory
What MySQL server are we setting up?
 - 1: Existing MySQL server (with root password already set).
 - 2: New MySQL server (needs to be initialized).
Choice: 2

Please supply a root password for MySQL. This password will be the administrative
user for this MySQL server, and it should be kept a secret. After this setup
process has completed, Kolab is going to discard and forget about this password,
but you will need it for administrative tasks in MySQL.

MySQL root password [1-zoaQWcsVkUiWK]: 

Please supply a password for the MySQL user 'kolab'. This password will be used
by Kolab services, such as the Web Administration Panel.

MySQL kolab password [AApcw81EFeobkBo]: 

Please supply the timezone PHP should be using. You have to use a Continent or
Country / City locality name like 'Europe/Berlin', but not just 'CEST'.

Timezone ID [UTC]: Europe/Paris

Please supply a password for the MySQL user 'roundcube'. This password will be
used by the Roundcube webmail interface.

MySQL roundcube password [C-w9vbcOJxjNl06]: 
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
ln -s '/usr/lib/systemd/system/kolab-saslauthd.service' '/etc/systemd/system/multi-user.target.wants/kolab-saslauthd.service'
ln -s '/usr/lib/systemd/system/cyrus-imapd.service' '/etc/systemd/system/multi-user.target.wants/cyrus-imapd.service'
ln -s '/usr/lib/systemd/system/kolabd.service' '/etc/systemd/system/multi-user.target.wants/kolabd.service'

Personnalisation de kolab

Pour affiner notre configuration il faut maintenant éditer le fichier /etc/kolab/kolab.conf en suivant les conventions définie par votre société:

Cherchez la section kolab.local (adaptez en fonction de votre fqdn):

Ici j'ai ajouté

  • la langue Française par défaut,
  • Le format prenom.nom pour les compte POSIX
  • Un quota à 10Go

    [kolab.local]
    default_locale = fr_FR
    policy_uid = %(givenname)s.%(surname)s
    default_quota = 10485760
    primary_mail = %(givenname)s.%(surname)s@%(domain)s

Authentification du système via ldap

WIP http://blog.zwiegnet.com/linux-server/configure-centos-7-ldap-client/

Peaufinage

Cette section sera remplie au fur et à mesure de mes trouvailles

Par défaut, amavisd affiche un très moche ***UNCHECKED*** sur tous les mails qui ne transitent qu'en local (localhost). Ça devient vite très désagréable dans la boite utilisateur.

Pour désactiver ça il faut ajouter la ligne suivante dans le fichier /etc/amavisd/amavisd.conf

$undecipherable_subject_tag = undef;

Premer login

Références

Ce document se base sur les sources suivantes:

http://docs.kolab.org/installation-guide/centos-community.html
https://kolab.org/blog/cornelius-hald/2014/11/12/kolab-3.3-single-domain-setup-centos-7
http://www.certdepot.net/rhel7-get-started-firewalld/
http://docs.kolab.org/installation-guide/first-login.html

[les dépôt kolab] http://docs.kolab.org/installation-guide/centos-community.html#installation-on-centos
[laissant le soin au sysadmin de le faire] http://docs.kolab.org/installation-guide/preparing-the-system.html#system-firewall
Permalink

Récupérer des données d'un VG dispersé sur plusieurs disques

Sommaire :

  1. État des lieux,
  2. Créer une image disque,
  3. L'utilitaire dd,
  4. L'utilitaire ddrescue,
  5. Montage des images,
  6. Les volumes logiques,
  7. Conclusion,
  8. Références.

État des lieux

Récemment j'ai été confronté à un problème de taille :

Mon serveur de fichier m'a lâché, avec dessus 1To de données. Alimentation HS et un disque avec des erreurs d'entrée / sortie.

Le problème aurait pu rester simple si je n'avais pas mis en place un VG éclaté sur trois disques durs dont 1 en scsi et 2 en sata.

Mais comme chaque problème à toujours sa solution sous GNU/Linux je vous propose la méthode que j'ai utilisé pour récupérer mes données.

Créer une image disque

Le premier réflexe à avoir pour tout problème concernant le stockage est de créer des images. En effet, travailler sur une image en plus d'être plus rapide, est plus sécurisé.

Si le fait de récupérer des données sur un média défecteux risque de dégrader celui-ci, l'image ne bougera pas et vous ne risquez pas de formater par erreur.

Pour cette étape, j'ai utilisé dd 1 et GNU ddrescue 2.

dd est réservé aux disques sains, en effet, à la première erreur celui-ci stoppera net. Mais sur un média propre je le trouve plus rapide.

ddrescue lui sera donc utilisé sur les disques contenant des erreurs. Cet outil est un peu le sauveur des médias HS. Non seulement il va continuer à créer l'image en évitant les secteurs erronés, mais en plus va tenter de les lire avec des tailles de blocs différents pour essayer de récupérer ceux-ci.

Le temps nécéssaire à la création des images sera bien-sûr en fonction de la taille de votre média. À titre d'exemple, il m'a fallut 2h pour les disques scsi en réseau, 30 minutes en local, 5 heures pour 500 gigas avec 3 secteurs HS et 8 heures pour 500 gigas avec plus de 130 secteurs HS.

L'utilitaire dd

Pour les disques scsi j'ai monté la carte sur une autre machine puis j'ai booté sur un liveUSB Fedora17. La machine de sauvegarde étant à distance je suis passé par le réseau :

Sur un terminal :

dd if=/dev/sdf | ssh user@192.168.1.x "dd of=/media/hdd/save/scsi01.img"
dd if=/dev/sdh | ssh user@192.168.1.x "dd of=/media/hdd/save/scsi02.img"

Ici, rien de compliqué : if= -> le média à sauvegarder of= -> l'image à créer. J'utilise un pipe pour envoyer les données via ssh puis dd sur la machine distante pour compléter la commande.

L'extension est accessoire et ne sert simplement qu'à se repérer plus facilement. De ce fait vous pouvez très bien ne rien mettre, sous GNU/Linux ce n'est pas un souci 3 !

L'utilitaire ddrescue

Pour les disques sata avec les I/O errors, on va d'abord sauvergarder les secteurs sains du disque :

ddrescue -B -v -n /dev/sdb /media/save/seagate.img /media/save/seagate.log

Explication de la commande 4 :

l'option la plus importante ici est l'option -n, elle nous permet de ne copier que les secteurs sain. Ainsi ddrescue saute tout ce qui ne va pas et crée une première image.

L'option -B permet d'avoir les tailles et dimensions en binaire

L'option -v pour avoir un affichage de ce qu'il se passe.

Le premier paramètre est le disque à sauvegarder (non monté),

Le second est l'image dans laquelle sauvegarder les données,

Afin de pouvoir travailler sur la même image il faut spécifier à l'utilitaire un fichier de log qui sera déclaré à chaque appel de la commande sur un même disque. Ce fichier enregistrera les zones défectueuses, il sera ainsi possible revenir dessus plus tard pour travailler dessus sans à avoir à tout sauvegarder de nouveau.

ddrescue -B -v -c 16 -r 2 /dev/sdb /media/save/seagate.img /media/save/seagate.log

L'option -c 16 permet de lire les secteurs corrompus par blocs de 16 secteurs (par défaut 128).

L'option -r 2 pour faire deux passes.

Si vous avez toujours des erreurs, il faut refaire une lecture de celles-ci secteur par secteur (et avec 5 passes) afin de récupérer le maximum de données, et ce autant de fois que nécéssaire pour que ddrecue vous affiche un joli "finished !".

ddrescue -B -v -c 1 -r 5 /dev/sdb /media/save/seagate.img /media/save/seagate.log

Pour mon disque contenant plus de 130 I/O erros, j'ai du le faire dix fois (donc 50 passes !) et toutes les données ont été récupérées.

Montage des images

Cette étape consiste à monter les images disque sur la machine de sauvegarde. Non pas un montage classique de système de fichiers car ça ne fonctionnerait pas avec des VG mais un montage en "bloc disque" qui se compare à une représentation d'un disque physique dans /dev afin d'avoir accès aux commandes lvm dessus. C'est à ma connaissance le seul moyen de travailler des images de volumes logiques.

Pour pouvoir monter ces images en bloc nous avons besoin de l'utilitaire losetup 5 qui permet de créer des disques dur virtuels à partir d'image.

Il y a deux façon de monter l'image, la première, plus simple est disponible si le module loop n'a pas été compilé en dur dans le noyau, quand à la seconde, je ne l'expliquerai pas ici (ne l'ayant pas utilisée) je vous laisse le soin de suivre le lien dans mes références6.

Si vous avez plusieurs partitions, afin qu'elle soient toutes disponibles, il faut décharger puis charger le module loop avec les bons paramètres :

modprobe -r loop modprobe & modprobe loop max_part=63

max_part=63 demander à loop de monter jusqu'à 63 partitions d'une image (on a de quoi voir venir ;) )

Ceci fait, il ne reste qu'à monter les différentes images :

losetup /dev/loop0 /media/hdd/save/scsi01.img
losetup /dev/loop1 /media/hdd/save/scsi02.img
losetup /dev/loop2 /media/hdd/save/seagate.img
losetup /dev/loop3 /media/hdd/save/western.img

Si le besoin de vouloir des explications se faisait resentir : /dev/loop0 => la boucle ou l'on veut monter l'image disque et ensuite le chemin vers l'image concernée.

Les volumes logiques

Si tout c'est bien passé, vous devriez voir apparaitre vos disques comme non monté. Ou comme ici, voir votre groupe de volumes logiques dans /dev/mapper/

Si c'est le cas, Il ne vous reste maintenant qu'à travailler vos partitions de manière tout à fait classique avec les outils lvm 7.

Pour commencer il faut scanner les disques :

pvscan

Si le groupe apparait il suffit de le charger :

vgchange -ay mongroupe

ou simplement vgchange -ay si vous n'avez qu'un groupe sur vos disques

Et il ne nous reste plus qu'à lister et monter les volumes logiques :

lvs

Puis :

mount /dev/mapper/myvol /media/source

À ce stade, les données devraient être présentes.

Conclusion

Comme d'habitude sous GNU/Linux l'impossible n'existe pas. Et avec ces utilitaires indispensables, nous pouvons facilement récupérer nos chères données !

Il faut certes un peu de temps, mais qu'est ce que sont quelques heures de travail pour nos précieuses photos de famille.

Références

1https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html

2https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html

3 https://fr.wikipedia.org/wiki/Extension_de_nom_de_fichier

4 http://forum.pcastuces.com/recuperation_de_donnees_sous_linux_ddrescue__tuto-f1s120710.htm?page=1

5 https://en.wikipedia.org/wiki/Loop_device

6http://www.thegibson.org/blog/archives/467

7https://fr.wikipedia.org/wiki/Gestion_par_volumes_logiques
Permalink