Enable CORS with IIS

It’s as easy as editing the web.config file with the below:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="https://my.site.com" />
        <add name="Access-Control-Allow-Headers" value="Authorization,Accept,Content-Type,X-Requested-With" />
        <add name="Access-Control-Allow-Credentials" value="true" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

L’application Android « Huawei Health » (ou « Santé » en français) retourne l’erreur : « les notifications sont indisponibles »

« Erreur du système, les notifications sont indisponibles. Veuillez redémarrer votre téléphone. Si le problème persiste, contactez le fabricant de votre appareil. »

J’ai eu cette erreur sur mon Samsung S20 FE. J’ai réussi à m’en sortir ou désinstallant tout puis en réinstallant… Mais je pense que la solution pouvait être autre : dans les Paramètres du téléphone, chercher Accès aux notifications, puis vérifier que l’application « Santé » est bien cochée !

Problème d’accès avec C:\Program Files\WindowsApps

J’utilise d’habitude le raccourci wt.exe dans la barre de Windows Explorer, mais j’ai reçu une erreur aujourd’hui me disant que le fichier n’existe pas…

Après quelques recherches, j’ai découvert que je n’ai aucun accès au répertoire C:\Program Files\WindowsApps là où se trouve Windows Terminal.

J’ai réussi à le refaire marcher en lançant un terminal en mode administrateur puis en exécutant la commande icacls "C:\Program Files\WindowsApps" /reset /t /c /q

J’ai reçu beaucoup de échec de traitement, mais ce fut quand même suffisant !

Microsoft Sharepoint Migration Tool that works behind a proxy

It looks like the newer version of the Microsoft Sharepoint Migration Tool doesn’t accept to work behind a corporate network.

A colleague has an older version (april 2020) that works correctly. Here is the link to download this version: SharepointMigrationToolSetup_April2020

Access to Sharepoint Online with Windows Explorer

If you want to access your Sharepoint online (https://[tenant].sharepoint.com), you first need to make sure the site is in the Trusted Website in Internet Explorer.
Open Internet Explorer, navigate to the website, then open the Internet Options:

Add your website to the Trusted Website zone:

Next open Windows Explorer and right-click on « Your PC « , then select « Map network drive… »:

You need to use a special path to your website. Let’s say your website is located at https://tenant.sharepoint.com/sites/Marketing then the path to use is:
\\tenant.sharepoint.com@ssl\DavWWWRoot\sites\Marketing\

Note the @ssl and DavWWWRoot that are required.

Assign this path to a drive letter:

Mise à jour d’un serveur Kimsufi (OVH) depuis Debian 9 (Stretch) vers Debian 10 (Buster)

Il faut régulièrement penser à mettre à jour son serveur Kimsufi.

Je vais essayer d’expliquer brièvement les étapes à suivre pour cela.

  1. On va effectuer une mise à jour des paquets avec apt-get update && apt-get upgrade
  2. Il peut être intéressant de vérifier la version de son kernel afin d’avoir la dernière recommandée. On va vérifier la version actuelle avec uname -r qu’on peut comparer sur https://tracker.debian.org/pkg/linux. Si on a un noyau OVH, il est recommandé de passer sur une version classique (voir cette discussion). Ensuite, on fait:
    apt-get install linux-image-amd64
    update-grub
    reboot
    

    Après le redémarrage, on peut vérifier la version du kernel avec uname -r

  3. Si vous avez une version personnalisée de MariaDB, vous pouvez vérifier que vous avez la dernière mise à jour pour Stretch
  4. On va sauvegarder les données :
    mkdir /root/svg_special; cp -R /var/lib/dpkg /root/svg_special/; cp /var/lib/apt/extended_states /root/svg_special/; dpkg --get-selections "*" > /root/svg_special/dpkg_get_selection; cp -R /etc /root/svg_special/etc
  5. Ensuite il est conseillé d’utiliser screen pour pouvoir se reconnecter (avec screen -r) à en cas de déconnexion :
    screen
  6. Le processus de mise à niveau décrit sur le site de Debian a été conçu pour des mises à niveau des systèmes « purs » sans paquet provenant d’autres sources. Pour une meilleure fiabilité du processus de mise à niveau, vous pouvez supprimer ces paquets du système avant de commencer la mise à niveau :
    aptitude search '~i(!~ODebian)'
  7. On peut éventuellement purger les vieux paquets obsolètes. Pour cela on va d’abord les lister, puis on peut les purger si tout semble bon:
    aptitude search '~o'
    aptitude purge '~o'
  8. On peut lancer la commande dpkg --audit pour s’assurer que tout est bon avant la migration. On peut également taper dpkg --get-selections "*" | more et vérifier qu’aucun paquet n’est en on hold
  9. Maintenant il faut remplacer tous les « stretch » de /etc/apt/sources.list par des « buster » (on pourra par exemple utiliser sed -i 's/stretch/buster/g' /etc/apt/sources.list), ce qui va donner chez moi :
    deb http://ftp.fr.debian.org/debian buster main non-free
    
    deb http://debian.mirrors.ovh.net/debian/ buster main
    deb-src http://debian.mirrors.ovh.net/debian/ buster main
    
    deb http://security.debian.org/ buster/updates main
    deb-src http://security.debian.org/ buster/updates main
    
    deb http://ftp.debian.org/debian buster-backports main
    
    deb http://debian.mirrors.ovh.net/debian buster-updates main
    deb-src http://debian.mirrors.ovh.net/debian buster-updates main
    

    On vérifiera aussi les autres fichiers qui peuvent se trouver dans /etc/apt/sources.list.d, en modifiant par exemple la source pour MariaDB.

  10. Il est recommandé d’utiliser le programme /usr/bin/script pour enregistrer une transcription de la session de mise à niveau. Ainsi, quand un problème survient, on a un enregistrement de ce qui s’est passé. Pour démarrer un enregistrement, taper :
    script -t 2>~/upgrade-stretch.time -a ~/upgrade-stretch.script
  11. On passe aux choses sérieuses, en commençant par mettre à jour les listes des paquets :
    apt-get update
  12. On va vérifier qu’on a la place suffisante (un message explicite apparait sinon) :
    apt -o APT::Get::Trivial-Only=true full-upgrade
  13. On va maintenant faire une mise à jour minimale :
    apt-get upgrade
  14. Et à partir de là le système va vous questionner… en général choisir l’option par défaut si vous ne savez pas quoi répondre
  15. Puis on continue avec
    apt full-upgrade

Cette dernière étape va durer un certain temps. Une fois terminé, vous pouvez redémarrer le serveur pour s’assurer que tout va bien.

Il est bien de vérifier que la version actuelle de PHP est correctement utilisée par Apache. Pour cela on vérifie la version avec:

php -v

Ensuite on regarde les versions de PHP disponibles dans les modules d’Apache :

ls -l /etc/apache2/mods-available/php*

Et on regarde celle activée :

ls -l /etc/apache2/mods-enabled/php*

Si la version ne correspond pas, alors on désactive la version actuellement gérée par Apache2 puis on active la dernière. Par exemple de PHP 7.0 à PHP 7.4 :

a2dismod php7.0
a2enmod php7.4

Et on redémarre Apache :

systemctl restart apache2

Il pourrait aussi être nécessaire d’installer php7.4-mysql :

apt-get install php7.4-mysql

Dans mon cas j’ai un serveur qui utilise Tomcat8 avec une vieille version de Java (« 1.8.0_265 ») contre la 1.11 qui a été installé pendant la mise à jour (on le voit avec java -v). La 1.8 n’est pas disponible pour Duster, donc j’ai suivi ces conseils :

apt-get update
apt-get install software-properties-common

Puis dans /etc/apt/sources.list.d/jdk8.list j’ai mis :
deb http://security.debian.org/debian-security stretch/updates main
Et ensuite :

apt-get update
apt-get install openjdk-8-jdk

Ensuite il faut modifier $JAVA_HOME… Pour cela on modifier d’abord /etc/environment en y mettant JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ ainsi que /etc/default/tomcat8

Des erreurs sur PHPMyAdmin peuvent survenir dû au passage à PHP 7.4. Il est recommandé de mettre à jour PHPMyAdmin. On va d’abord vérifier qu’on a une source buster-backports dans /etc/apt/sources.list. Dans mon cas j’ai pu mettre à jour comme cela :

apt-get upgrade php-tcpdf php-twig
apt-get install -t buster-backports php-twig
apt-get install phpmyadmin


Une fois les erreurs corrigées, on va nettoyer tous les paquets avec :
apt-get autoremove

On arrête screen en faisant CTRL + A puis k.

Connectivity issue with Qualcomm QCA61x4A 802.11ac in 5GHz

I have a Dell computer with the wireless adaptater « Qualcomm QCA61x4A 802.11ac » which supports Wifi in 5GHz. However, I’ve recurrent deconnections when being connected to my 5GHz network, even if all my other devices don’t have any issues. It works well with the 2.4GHz network.

I’m on Windows 10 and after trying many different things, I found a workaround:

  1. Open a CMD window (by pressing Windows key + X, then select Windows PowerShell (Admin))
  2. Then type: netsh wlan set autoconfig enabled=no interface="Wi-Fi"
  3. You won’t see any WiFi network anymore from the Wifi icon, but it stops the issues with the connectivity

If you need to connect to a different network, or if you have restarted your computer, you may need to turn it on again with the below command:
netsh wlan set autoconfig enabled=yes interface="Wi-Fi"

Once connected, make sure to turn if off again.

Let’s Encrypt Certificate: how to remove a domain from a certname that contains several domains

My server manages several websites with different domains using Apache. The first time I used Let’s Encrypt I followed the default command which has created one certname for ALL my domains.

Now I want to remove just one domain from this certificate, and it becomes complicated to understand how to do it. The best solution is to create a new certificate for each of my domains, and then to delete the original certname.

Let’s say my certname is called www.example.com and it contains the below domains:

  • www.example.com
  • example.com
  • blog.example.com
  • other-example.com
  • www.other-example.com
  • my-other-domain.com
  • www.my-other-domain.com
  • api.test.com

The one I don’t need anymore is *.my-other-domain.com.

First, we create a certificate individually for each domain that we want to keep:

certbot --apache --cert-name example.com -d example.com,www.example.com,blog.example.com
certbot --apache --cert-name other-example.com -d other-example.com,www.other-example.com
certbot --apache --cert-name test.com -d api.test.com

--cert-name permits to give our own name to the certificate, and -d indicates which domains should be added to this certificate.

Then we can list all our certificates:

certbot certificates

Using the above command you can find the Certificate Path and now we can delete our original certificate:

certbot revoke --cert-path /etc/letsencrypt/live/www.example.com/fullchain.pem

You’re all set! All your domains should still have a correct certificate, and you revoked the ones you don’t need anymore.