Apple Software Update — Un serveur interne et transparent

Mac OS X Server propose une fonctionnalité très intéressante, le serveur de mise à jour, il permet d’utiliser notre serveur comme miroir du serveur de mise à jour d’Apple. Son seul défaut est de nécessité des manipulations pour l’imposer au client, sauf si vous connaissez bien les DNS. C’est tout l’objet de cet article.

Voici le principe, Mac OS X, qu’il soit client ou serveur, utilise plusieurs serveurs pour gérer les mises à jour, celui qui nous intéressera ici est swscan.apple.com qui renvoie aux clients une liste de mise à jour sous forme de fichier xml. Dans cette liste se situe donc les mises à jour avec entre autre leur localisation, par exemple pour Apple les mises à jour son sur swcdn.apple.com.

L’idée ici va être de faire en sorte que notre serveur se fasse passer pour swscan.apple.com et redirige ainsi non pas sur swcdn.apple.com, mais sur notre propre serveur interne, mais cela uniquement pour nos clients, il ne faudrait pas que notre serveur de mise à jour tourne sur lui-même.

Différentes méthodes sont disponibles sur internet, la plus répandue propose de mettre en place deux serveurs dont un qui n’est pas relié à votre DNS interne. Cette solution ne me plais pas vraiment, elle limite les possibilités de ce serveur. Voici donc une solution que je viens de mettre en production chez moi, elle vous est donc proposée à titre d’exemple, je vous laisse le soin de la tester pleinement.

Je considère pour cet article que votre serveur de mise à jour est déjà opérationnel, je m’attarderais donc uniquement sur le hack du serveur DNS.

Ouvrez donc Server Admin et créé une nouvelle zone DNS pour swscan.apple.com. où vous rajouterez une entrée A pour le FQDN swscan.apple.com. pointant vers l’adresse IP de votre serveur de mise à jour.

De cette manière vos clients se verrons envoyé sur votre serveur en lieu et place du serveur d’Apple. Cependant, votre serveur de mise à jour écoute par défaut sur le port 8088 alors que les clients chercherons le port 80. Nous allons donc rajouter un site à notre serveur web qui écoute déjà sur le port 80.

Là aussi, plusieurs méthodes existent, la plus couramment proposé rajoute un site et configure des redirections pour chaque fichier servant d’index de mise à jour. Pour ma part je vais utiliser une méthode beaucoup plus rapide puisque mon serveur web et mon serveur de mise à jour se trouve sur le même disque. Je vais définir le même dossier racine pour mon faux swscan.apple.com que celui utilisé par le serveur de mise à jour.

Par défaut les mises à jour sont stockées dans /usr/share/swupd sauf si vous les avez déplacés sur un disque externe, dans ce cas je vous laisse retrouvé où vous les avez mises à l’aide de la configuration du service de mise à jour. Dans le dossier du service de mise à jour il y a un dossier html, c’est celui-ci qu’il faudra définir comme racine de notre nouveau site.

Rajoutons donc un site dans notre serveur web :

J’ai également modifié le fichier index par défaut bien que ce ne soit pas nécessaire pour les machines. J’ai placé ici index.sucatalog pour voir plus facilement si ma configuration marche.

Ainsi avec cette configuration, si vous vous rendez sur http://swscan.apple.com/ (avec éventuellement index.sucatalog à la fin) vous devez vous retrouver avec une page comme celle-ci :

Vous remarquerez en lisant le contenue que les mises à jour sont bien indiquées comme étant sur http://office.inig-services.com:8088/ qui est bien mon serveur de mise à jour.

Faites donc un test depuis vos clients, sous conditions qu’ils soient correctement configuré au niveau des serveurs DNS vous utilisez maintenant votre serveur interne !

Il reste une chose à faire maintenant, configurer votre serveur interne pour qu’il s’adresse bien au serveur externe d’Apple. Pour cela nous allons exploiter une fonctionnalité très intéressante de Mac OS X qui est le dossier /etc/resolver.

Ce dossier permet de spécifier un serveur DNS spécial pour un domaine précis (cf. Mac OS X Hints pour plus d’informations).

Par défaut ce dossier n’existe pas, nous allons donc le créer en tant que root et laisser les droits par défaut (rwxr-xr-x root:wheel) puis rajouter un fichier swscan.apple.com à l’intérieur qui contiendra ceci :

domaine swscan.apple.com
search_order 2
nameserver 8.8.8.8
nameserver 8.8.4.4
port 53

Cela indiquera à notre serveur que pour retrouver swscan.apple.com il doit consulter les DNS de Google.

Profitez de votre terminal en root pour faire un dscacheutil -flushcache et essayez donc d’ouvrir http://swscan.apple.com/content/catalogs/index-1.sucatalog depuis votre serveur !

Vous constatez bien que les URL de téléchargement ici renvois vers swcdn.apple.com, c’est donc que notre hack a fonctionné !

Vous pouvez aussi le voir en ouvrant l’application Software Update sur un client et sur le serveur et constater ainsi la différence de vitesse.

Une note cependant à propos du dossier resolver. C’est une fonctionnalité qui n’est pas forcément utilisée par les commandes unix, ainsi host ou dig vous renverrons la valeur de votre DNS local alors que le ping lui essayera bien de contacter le bon serveur.

Si vous avez des remarques concernant cette manipulation n’hésitez pas à laisser des commentaires.

Je rappelle également que ceci n’est pas un fonctionnement standard, vous êtes seul responsable de ce que vous faites, évitez par exemple de faire cette manipulation avec un serveur DNS qui peut être contacté depuis l’Internet…

10 réflexions au sujet de « Apple Software Update — Un serveur interne et transparent »

  1. Bonjour,
    Cet article est super !
    Je me permets de vous indiquer qu’il faut rajouter aussi un autre site web, dans votre cas « office.inig-services.com », qui répond sur le port 8088 et qui pointe aussi sur le dossier html des mises à jour.
    Ainsi les clients peuvent télécharger les mises à jours
    ;-)

  2. Ping : Yoann Gini » Apple Sofwate Update & Services web, attention conflit !

  3. Bonjour,
    Merci pour ce super article, j’ai mis en place le serveur de mise à jour, mais je rencontre un problème avec les postes qui sont en Tiger.
    Impossible de faire les MaJ avec le serveur local, il met l’erreur suivant : « Erreur réseau : Error NSURLErrorDomain -1100 (-100). »
    Et je n’arrive pas à résoudre ce problème.
    Si quelqu’un à une idée, je suis preneur.
    D’avance merci

  4. Si jamais d’autre personnes on le problème que je cite plus haut avec le serveur de mises à jour et les postes en 10.4, il y a 2 choses à faire sur le serveur :
    – D’abord créer un lien symbolique du fichier index.sucatalog : sudo ln -s /var/db/swupd/html/content/catalogs/index.sucatalog /var/db/swupd/html/content/catalogs/index-1.sucatalog
    Je ne sais pourquoi mais les postes en 10.4 cherche à lire le catalogue qui ce nomme index-1.sucatalog.
    – La deuxième chose dans admin serveur, allez sur le service web, sélectionner le site swscan.apple.com et allez dans l’onglet « alias » et ajouter une rediretion
    Motif : /content/catalogs/index-1.sucatalog
    Chemin : http://votreserveur.domaine.com:8088/index.sucatalog

  5. J’ai essayer cette méthode avec SL, et ce fut exceptionnellement rapide dans mon réseau pour toute les mises à jours.

    Maintenant que j’ai mis à jour mon serveur en lion, je voulais savoir si cela fonctionnais encore et si oui comment, car j’aimerais refaire cette configuration qui est très pratique dans mon environnement professionel.

  6. Pour ma part, la méthode utilisée est celle de base, configuration DNS (avec adresses IP du réexpéditeur sur les DNS Google (8.8.8.8 et 8.8.4.4) et ensuite serveur de Mise à Jour via Admin Server pour un serveur sous 10.6.8. Depuis quelques temps j’obtiens l’erreur suivante lorsque j’actualise la recherche des mise à jour dispo sur les Macs clients : « L’opération n’a pas pu s’achever. (NSURLErrorDomain erreur -1100). » et cette erreur apparaît sur l’ensemble des machines clientes sous 10.5, 10.6, 10.8. Et des fois les mises à jours sont envoyées aux Macs Clients et lors de la réactualisation pour vérifier si il y a encore des MAJ dispo l’erreur apparaît de nouveau.

    Quelqu’un aurait une idée ? Ayant chercher partout sur internet, les forums Apple US, les seules info que je trouve concerne la mise à jour de iTunes 10.7 lorsque les serveurs Apple étaient « busy » en septembre 2012. Merci d’avance pour votre aide.

  7. Bonjour Yoann,
    merci pour cet article. J’ai très peu de connaissance serveur OSX et j’essaye de mettre en place également un serveur de mises à jour transparent comme dans l’article au dessus mais je n’ai pas les mêmes fenêtres que vos captures d’écrans et donc à priori par les mêmes possibilité de réglage. Je suis sous Mavericks 10.9.3 et Server 3.1.2. Auriez-vous un article pour ma configuration?
    PS : j’ai également acheter votre livre OS X Server sur iBooks mais je n’ai pas la réponse à ma question.
    Merci

Laisser un commentaire