Fix a stuck Steam client on Mac OS X

From time to time, the startup of my Steam client on Mac OS X (10.6.8) is incredibly slow. And sometimes, it won't even launch successfully, getting stuck with a Beach Ball of Death.
A quick diagnostic comes from the powerful utility dtruss:

$ sudo dtruss -p <PID of steam process>
...
__semwait_signal(0x14D03, 0x4D03, 0x1)		 = -1 Err#60
__semwait_signal(0x17C03, 0x3F03, 0x1)		 = -1 Err#60
__semwait_signal(0xC03, 0x0, 0x1)		 = -1 Err#60
semop(0x2000F, 0xB5464C98, 0x1)		 = -1 Err#35
__semwait_signal(0xC03, 0x0, 0x1)		 = -1 Err#60
__semwait_signal(0x4D03, 0x14D03, 0x1)		 = -1 Err#60
...

If you read a LOT of errors on __semwait_signal and semop lines, you can fix your client quite easily. I must say, it might have some side effects, but I've never seen any.
First, kill the Steam client (right-click on it's icon in the Dock, choose "Force Quit"), then list semaphores:

$ ipcs -s
IPC status from <running system> as of Fri Nov 30 21:28:29 CET 2012
T     ID     KEY        MODE       OWNER    GROUP
Semaphores:
s 131072 0xe93c17d9 --ra-------   patpro   patpro
s 131073 0xc0ec4f17 --ra-ra-ra-   patpro   patpro
s 196610 0xb9e1e4e1 --ra-ra-ra-   patpro   patpro
s 131075 0x697a55e6 --ra-ra-ra-   patpro   patpro
s 131076 0x2e726ce1 --ra-ra-ra-   patpro   patpro
s 196613 0xa9ae61d6 --ra-ra-ra-   patpro   patpro
s 131078 0x1a661f70 --ra-------   patpro   patpro
s 196615 0x36dbd757 --ra-------   patpro   patpro
s 196616 0x44433b26 --ra-ra-ra-   patpro   patpro
s 196617 0x3cea9ea0 --ra-ra-ra-   patpro   patpro
s 196618 0xec712fa7 --ra-ra-ra-   patpro   patpro

If your steam client is not running and you read a full list of semaphores, you might want to remove them:

$ for SEM in $(ipcs -s | awk '/^s / {print $2}'); do ipcrm -s $SEM; done

Then, your Steam client should launch faster (well, at a normal speed), and it shouldn't get stuck.
Use at your own risks.

Related posts

La DSI recrute…

La Direction des Systèmes d'Information de l'Université Lyon 2 recrute 5 personnes :

  • 3 administrateurs système polyvalents,
  • 1 ingénieur "industrialisation",
  • 1 un technicien gestionnaire de parc informatique

Je joins ci-dessous le profil de poste Administrateur Système, puisque ces trois personnes seront sous ma responsabilité :

Catégorie : A
Corps (ou niveau de recrutement pour les contractuels) : ingénieur d’études de recherche et de formation
Filière : ingénieurs, techniciens de recherche et de formation (ITRF)
Nombre de postes offerts : 3
Localisation du poste : Université Lumière Lyon 2 – Direction des systèmes d’information – 5 avenue Pierre Mendès- France à Bron
Type de recrutement : CDD 1 an renouvelable
Niveau de diplôme requis : niveau II
Quotité de travail : 100%
Niveau de rémunération en cas de CDD : 1705 euros net mensuel
Date de la vacance du poste : 03/01/2013

Mission :
Au sein de l'équipe Système du pôle Opérations de la DSI Lyon 2, vous avez en charge l’administration et l’exploitation des infrastructures serveur physique et virtuelle.

Activités essentielles :
Configuration et supervision des systèmes informatiques physiques et virtuels (VMware)
Exploitation des applications en production à l’université
Administration des serveurs (web, bases de données, messagerie, etc.)
Collaboration avec le pôle Support, le pôle Etudes et les intervenants et fournisseurs
Participation à l’élaboration de cahiers des charges dans le cadre de nouveaux projets
Gestion des incidents
Veille technologique, évolution, et modernisation

Compétences souhaitées :
De formation BAC +3 minimum en informatique, vous possédez une expertise technique certaine, et de bonnes
capacités d'intégration. Vous êtes autonome, rigoureux et savez travailler en équipe.

VMware ESXi / VSphere
Linux (distribution RedHat) et Windows. Mac OS X Server et FreeBSD sont un plus.
Outils et procédures liés à l’exploitation des services (supervision, sauvegarde...)
Réseaux TCP/IP et outils de métrologie
Bonnes capacités d'expression, rigueur, et organisation
Anglais technique

Compétences appréciées :
vShield, vCould Director
ITILv3
Postfix, filtrage antispam,
Firewall iptables
Serveurs Apache, Tomcat
SAN/NAS
LDAP, CAS, Shibboleth, Active Directory
Oracle, MySQL
Logiciel de sauvegarde industriel

Contexte et environnement de travail
Le candidat exercera son activité sur le campus Portes des Alpes au sein du pôle "Opérations" (6 personnes) de la D.S.I. (40 personnes).
L’Université Lumière Lyon 2 rassemble les formations et les équipes de recherche des disciplines juridiques, économiques et gestionnaires, les lettres, les langues, les sciences humaines et sociales auxquelles s’ajoute l’informatique. Un Institut Universitaire de Technologie lui est rattaché. L’Université accueille près de 29 000 étudiants sur deux sites principaux : Le campus Berges du Rhône (Lyon 7ème) et le campus Porte des Alpes (Bron).
Les candidatures (curriculum vitae et lettre de motivation) doivent être transmises au plus tard le 30 novembre 2012 à l’adresse suivante :
Université Lumière Lyon 2 Direction des ressources humaines Service de gestion des personnels BIATOSS A l’attention de Daniel CERCEY 86 rue Pasteur – 69365 Lyon Cedex 07
ou drh-recrutementbiatoss@univ-lyon2.fr
Nous vous remercions de rappeler le numéro de l’offre de recrutement sur votre candidature

Et puis ne vous laissez pas abuser par le salaire, les journées sont chargées, mais on a presque 50 jours de congés annuels.

Related posts

PowerMac à vendre, 350 € (vendu)

Je vends mon Power Mac G5, tour bi-processeur PPC 2GHz. Il dispose de 3,5 Go de RAM, d'un disque dur 1To, d'une carte Airport, d'une carte ethernet Apple supplémentaire.
L'annonce complète est visible sur le bon coin, mais vous pouvez aussi me contacter directement via les commentaires.

Livré avec Mac OS X 10.5, clavier/souris Apple, il est à retirer sur place (je n'ai pas de voiture).

Related posts

Appartement à vendre… hmm, VENDU.

Un petit peu de publicité pour mes parents qui veulent vendre leur appartement : http://proniewski.net/appartement

Il est au Havre, très bien situé, et plutôt grand (216 m2). Cheminées fonctionnelles, orienté au soleil… C'est l'étage fleuri sur la photo de la façade. Avis aux amateurs !

Facade de l'immeuble
Salon - avec cheminée en état de marche

Related posts

Welcome to our Z410 Storage Beta program

rahhh lovely

C'est Noël ! Dommage que mes congés soient terminés...

Related posts

Installation de Nuxeo DM sur FreeBSD, épisode 3

Avec un peu de travail, Nuxeo DM peut être abrité en HTTPS derrière un serveur Apache. Je fais l'impasse sur la configuration interne à Nuxeo, elle se fait très simplement à la première connexion via l'assistant fourni. Si vous êtes arrivés jusque là, il ne manque plus qu'un script de démarrage pour que tout fonctionne de manière transparente sur votre serveur.
Voici le contenu du script de lancement/arrêt pour une instance de Nuxeo DM, /usr/local/etc/rc.d/nuxeo. N'oubliez pas de remplacer la valeur de nuxeo_home par le chemin de votre répertoire nuxeo :

#!/bin/sh

# PROVIDE: nuxeo
# REQUIRE: DAEMON
# BEFORE: LOGIN

# Define these nuxeo_* variables in one of these files:
#       /etc/rc.conf
#       /etc/rc.conf.local
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
#
nuxeo_enable="${nuxeo_enable-NO}"
nuxeo_user="${nuxeo_user-nuxeo}"
nuxeo_home="/CHEMIN/DE/nuxeo"

. /etc/rc.subr

name="nuxeo"
rcvar=`set_rcvar`
start_cmd=${name}_start
stop_cmd=${name}_stop

nuxeo_start()
{
cd $nuxeo_home
$nuxeo_auditflags sudo -u $nuxeo_user ./bin/nuxeoctl startbg
}

nuxeo_stop()
{
cd $nuxeo_home
sudo -u $nuxeo_user ./bin/nuxeoctl stop
}

load_rc_config $name

run_rc_command "$1"

Une fois le fichier créé, rempli, et rendu exécutable, il faut ajouter ces quelques lignes à votre fichier /etc/rc.conf :

nuxeo_enable="YES"
nuxeo_user="NUXEO_USER"

Vous remplacerez bien sûr NUXEO_USER par le nom du compte utilisateur qui fera tourner l'application Nuxeo DM. Après cela, les commandes /usr/local/etc/rc.d/nuxeo restart, /usr/local/etc/rc.d/nuxeo stop et /usr/local/etc/rc.d/nuxeo start doivent fonctionner.
Attention, suivant la puissance de votre machine, et l'état de remplissage de Nuxeo, le temps de lancement peut varier énormément.

Côté mise à jour, vous pouvez accéder aux "hotfix" officiels, gratuitement pendant 30 jours, moyennant une inscription sur le site web de Nuxeo. L'inscription se passe facilement, par contre les mise à jour sont délicates et nécessitent de suivre scrupuleusement les instructions du support Nuxeo. Notamment, relancez bien l'application entre chaque mise à jour.

Related posts

Installation de Nuxeo DM sur FreeBSD, épisode 2

Une application Tomcat ne devrait pas se trouver nue sur internet. J'ai pour habitude de toujours placer un frontal Apache devant. Cela autorise divers améliorations du service. Apache peut par exemple gérer l'authentification des utilisateurs, faire une balance de charge entre plusieurs instances de l'application, etc. Il permet aussi à votre application d'être joignable sur les port HTTP(S) standard (80 et 443) sans que l'application doive être lancée en root (et sans recourir à une redirection dans votre firewall).

Il existe plusieurs moyens de présenter Nuxeo DM au travers d'un proxy Apache. J'ai choisi d'utiliser mod_proxy. Avec mod_proxy, la configuration est assez standard. Tout, ou presque, est réglé en 3 lignes si on se contente de l'HTTP. Mais pour sécuriser mes connexions à Nuxeo, qui contiendra mes documents personnels et confidentiels, j'ai décidé d'utiliser HTTPS.
J'ai donc un virtual host Apache, et un certificat SSL associé, dans le quel j'inclue les directives de mod_proxy.

<VirtualHost IP.DU.SER.VEUR:443>
   ServerName DOMAINE.TLD:443
   UseCanonicalName On
   DocumentRoot "/chemin/de/nuxeo/"

   SSLEngine on
   #... config SSL ...

   RequestHeader append nuxeo-virtual-host "https://DOMAINE.TLD/"
   <IfModule proxy_module>
     ProxyRequests Off
     <Proxy *> 
        Order deny,allow
        Allow from all
     </Proxy> 
     ProxyPass /nuxeo/ http://localhost:8080/nuxeo/
     ProxyPassReverse /nuxeo/ http://localhost:8080/nuxeo/
     ProxyPreserveHost On
   </IfModule>

</VirtualHost>

Ça c'est d'après la documentation. En réalité, ce n'est pas suffisant. Tout d'abord, il faut bien placer la directive RequestHeader à l'extérieur du bloc proxy_module, sinon elle est juste ignorée par le serveur. Il ne m'a pas fallu moins qu'un tcpdump pour localiser le problème.
J'ai aussi constaté qu'avec ces directives, la première connexion à l'application se fait bien, puis on est immédiatement redirigé vers le même virtual host mais sur le port 80. Je règle le problème avec une directive de redirection dans le vhost http :

<VirtualHost *>
    ServerName DOMAINE.TLD
    DocumentRoot /chemin/de/nuxeo
    Redirect / https://DOMAINE.TLD/ 
</VirtualHost>

Ce n'est pas totalement satisfaisant, mais faute de mieux, cela fonctionne parfaitement.
En relançant Apache à ce stade, on obtient un proxy fonctionnel et sécurisé par SSL pour Nuxeo.

Avant d'aller plus loin, on peut prendre quelques minutes pour créer une base de données MySQL (ou autre) et un utilisateur MySQL associé à cette base. C'est ce compte de base de données qu'il faudra fournir au moment de la configuration de Nuxeo.

Je fais totalement l'impasse sur la configuration de Nuxeo DM dans le "wizard", elle est bien documentée, et plutôt simple. Il suffit de lancer l'application par la commande ad-hoc si ce n'est pas déjà fait :

# cd /chemin/du/répertoire/nuxeo
# sudo -u nuxeo_user ./bin/nuxeoctl startbg

Ensuite on se connecte à l'adresse https://DOMAINE.TLD/nuxeo et on peut entamer la configuration.

Related posts

Installation de Nuxeo DM sur FreeBSD, épisode 1

J'ai récemment choisi Nuxeo DM comme application de GED. C'est une application en JAVA, tournant dans un serveur d'application Tomcat. Nuxeo est packagé sous différentes formes, une seule est utilisable sur FreeBSD : Nuxeo DM Tomcat bundle.
L'installation de Nuxeo sur FreeBSD nécessite trois choses : installer les pré-requis logiciels, configurer l'environnement pour sécuriser l'application, et configurer l'application elle-même.

Côté pré-requis, il faut tout d'abord installer le Java Runtime Environment, et le Java Development Kit. Sous FreeBSD, il faut donc installer les ports java/diablo-jdk16 et java/diablo-jre16. Pour une question de licence, il faut télécharger à la main les packages nécessaires chez Oracle. Il suffit simplement de suivre les instructions obtenues pour chaque port au moment du make. Par exemple :

$ cd /usr/ports/java/diablo-jdk16/
$ make
===>  License check disabled, port has not defined LICENSE
===>  Found saved configuration for diablo-jdk-1.6.0.07.02_12

 Because of licensing restrictions, you must fetch the distribution
 manually.

 Please open http://www.oracle.com/technetwork/java/javase/downloads/index.html
 in a web browser and follow the "Download" link for
 "JDK DST Timezone Update Tool - 1_3_42" to obtain the
 time zone update file, tzupdater-1_3_42-2011k.zip.

 Please place the downloaded file(s) in /usr/ports/distfiles.
 ...

Une fois les ports java/diablo-jdk16 et java/diablo-jre16 installés, il faut installer un serveur web comme Apache 2.2, un serveur de bases de données (MySQL ou PostgreSQL par exemple), et à minima pdftohtml. Il est aussi possible d'installer OpenOffice, mais comme il n'existe pas de version "headless" dans les ports de FreeBSD, cela vous embarque dans l'installation complète avec gestionnaire de fenêtre et tutti quanti. Une calamité.
Pour utiliser l'application sur une connexion sécurisée (HTTPS), il faut qu'Apache dispose d'un certificat SSL adéquat.

Quand tout ceci est installé et configuré, il faut encore ajouter un compte utilisateur pour l'application Nuxeo. Les paresseux pourront la faire tourner sous le compte www. J'ai préféré un utilisateur indépendant, plus facile à tracer via auditd et l'accounting.

On peut alors télécharger et décompresser le package multiplateforme à partir du site internet de Nuxeo. On obtient un répertoire nommé nuxeo-dm-5.4.2-tomcat. J'ai pour habitude d'exploiter une application à partir d'un répertoire ne portant pas de numéro de version. On aura intérêt à renommer ce répertoire en nuxeo, car ici, faire un lien symbolique de nuxeo-dm-5.4.2-tomcat vers nuxeo ne donne pas vraiment satisfaction.
Pour en finir avec les fichiers, il faut faire un chown -R sur le répertoire nuxeo pour que les fichiers appartiennent tous à l'utilisateur non privilégié que l'on a créé plus haut.

Ensuite, comme nous sommes sur FreeBSD et pas Linux, il faut revoir certains scripts shell. Ces derniers ont un shebang qui pointe vers /bin/bash alors que notre bash est dans /usr/local/bin/. Les scripts à modifier sont les suivants : bin/monitorctl.sh, bin/nuxeoctl, bin/pack.

Arrivé là, il est intéressant de lancer l'application via la ligne de commande pour tester qu'au moins elle se lance et répond sur le port 8080 :

# cd nuxeo
# sudo -u nuxeo_user ./bin/nuxeoctl startbg
...
No current configuration, generating files...
Configuration files generated.
Server started with process ID 1438.

Le serveur est lancé, et il écoute bien sur le port 8080 :

# netstat -alnf inet | grep 8080
tcp4       0      0  *.8080                 *.*                    LISTEN

Ce que l'on peut aisément vérifier avec un client HTTP en ligne de commande, ou un coup de telnet :

$ curl http://127.0.0.1:8080
<META HTTP-EQUIV="refresh" CONTENT="0;URL=/nuxeo">

On a maintenant une application Tomcat/Java qui tourne sur notre serveur FreeBSD, sous un compte utilisateur dédié. Il reste à brancher devant un proxy Apache HTTPS, créer un script de démarrage automatique pour l'application, et configurer cette dernière.

La suite au prochain épisode :)

Related posts