L'installation via Steam peut effacer ma maison. Comment l'empêcher?

14

J'ai lu un sujet troublant sur Valve où un utilisateur a perdu son système lors de l'utilisation du script Steam. Il y a une discussion sur reddit.linux et sur reddit / steam .

Ce n'est peut-être pas un problème courant car je modifie toutes sortes de configurations sur mon système. Le script en question fait quelque chose d'une manière vraiment, vraiment stupide, mais il ne déclenche probablement pas le scénario d'échec pour chaque système parce que ...

Bug d'origine:

Je ne sais pas ce qui s'est passé. J'ai déplacé le dossier dans le titre vers un lecteur monté sous /media/user/BLAHet un lien symbolique /home/user/.local/steamvers le nouvel emplacement.

J'ai lancé Steam. Il ne s'est pas lancé, il m'a proposé de naviguer, et je n'ai toujours pas pu le trouver lorsque j'ai indiqué le nouvel emplacement. Steam s'est écrasé. Je l'ai redémarré.

Il s'est réinstallé et tout avait l'air super. Jusqu'à ce que je regarde et constate que Steam avait apparemment supprimé récursivement tout ce qui appartenait à mon utilisateur du répertoire racine. Y compris mon disque externe de 3 To, je sauvegarde tout ce qui a été monté sous / media.

Tout ce qui était important, pour la plupart, était dans le cloud. C'est un énorme problème, mais ce n'est pas une catastrophe. S'il y a une chance que le déplacement de votre dossier Steam puisse entraîner la suppression récursive de tout dans l'arborescence des répertoires, vous devriez probablement simplement afficher une erreur au lieu d'essayer de pointer vers d'autres éléments. Ou vous savez, permettez à l'utilisateur de choisir un répertoire d'installation initialement comme sur Windows.

Mon système est Ubuntu 14.04, et le lecteur sur lequel je l'ai déplacé était ntfs si cela vaut la peine.

Rinzwind
la source

Réponses:

14

Le problème commence autour de la ligne 19 du script "steam.sh.":

STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMDATA="$STEAMROOT"

$STEAMROOTpeut devenir vide ici, ce qui rend rm -rf "$STEAMROOT/"*plus loin dans le script la même chose que rm -rf "/"*.


Il y a des correctifs et il y a beaucoup de problèmes avec ce script. Plus facile à modifier et au moins à empêcher la suppression de fichiers, il ne devrait pas ...

rm -rf "$STEAMROOT/"*

à ...

[[ -n $STEAMROOT && $STEAMROOT =~ 'steam' ]] && rm -rf $STEAMROOT

Il est également possible d'ajouter une sortie juste après la STEAMDATAdéfinition:

STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMDATA="$STEAMROOT"
if [ -z "$STEAMROOT" ]; then
    echo "stop script otherwise files are deleted from /."
    exit 1
fi

Si quelqu'un a installé Steam en tant que root, soyez averti: cela supprimera votre disque ENTIER.

Rinzwind
la source