Le bouton de désinstallation exécute le script suivant, situé à
/Library/Filesystems/fusefs_txantfs.fs/Contents/Resources/Support/uninstall-package.sh
#!/bin/bash
if [ "$0" != "/bin/uninstall-for-real" ]; then
echo "Réexécution du script à partir de la mémoire."
/bin/bash -c "`cat \"$0\"`" "/bin/uninstall-for-real" "$@"; exit $?
else
echo "Exécution en mémoire activée."
fi
NOM_DU_DRIVER="Tuxera NTFS"
NOM_DU_PAQUET="TuxeraNTFS"
NOM_DU_PAQUET_COMPAT="TuxeraNTFS_compat"
ID_DU_PAQUET="com.tuxera.pkg.Tuxera_NTFS"
ID_DU_PAQUET_COMPAT="com.tuxera.pkg.Tuxera_NTFS_compat"
NOM_DU_BUNDLE_FS="fusefs_txantfs"
REP_BUNDLE_FS="/Library/Filesystems/${NOM_DU_BUNDLE_FS}.fs"
REP_COMPAT_BUNDLE_FS="/System/Library/Filesystems/${NOM_DU_BUNDLE_FS}.fs"
REP_PREFERENCE_PANE="/Library/PreferencePanes/${NOM_DU_DRIVER}.prefPane"
REP_STARTUP_ITEMS="/Library/StartupItems/${NOM_DU_PAQUET}UnmountHelper"
REP_DISK_MANAGER="/Applications/Tuxera Disk Manager.app"
CHEMIN_ANCIEN_BUNDLE_RECEIPT="/Library/Receipts/${NOM_DU_PAQUET}.pkg"
CHEMIN_ANCIEN_RECEIPT="/${CHEMIN_ANCIEN_BUNDLE_RECEIPT}/Contents/Archive.bom"
CHEMIN_COMPAT_BUNDLE_RECEIPT="/Library/Receipts/${NOM_DU_PAQUET_COMPAT}.pkg"
CHEMIN_COMPAT_RECEIPT="/${CHEMIN_COMPAT_BUNDLE_RECEIPT}/Contents/Archive.bom"
CHEMIN_NOUVEAU_RECEIPT="/var/db/receipts/${ID_DU_PAQUET}.bom"
CHEMIN_PLIST_NOUVEAU_RECEIPT="/var/db/receipts/${ID_DU_PAQUET}.plist"
CHEMIN_COMPAT_NOUVEAU_RECEIPT="/var/db/receipts/${ID_DU_PAQUET_COMPAT}.bom"
CHEMIN_PLIST_COMPAT_NOUVEAU_RECEIPT="/var/db/receipts/${ID_DU_PAQUET_COMPAT}.plist"
REP_SUPPORT_APPLICATION="/Library/Application Support/Tuxera NTFS"
CHEMIN_RECU_BAK="${REP_SUPPORT_APPLICATION}/Receipt.bom"
CHEMIN_RECU_COMPAT_BAK="${REP_SUPPORT_APPLICATION}/Receipt_compat.bom"
erreur() {
echo "Il y a eu des erreurs... Abandon."
exit 1
}
verifierErreurs() {
_ERRVAL=$1
if [ ! "${_ERRVAL}" -eq 0 ]; then erreur; fi
}
EUID_REEL=${EUID}
if [ ${EUID_REEL} -ne 0 ]; then
echo "ERREUR : Pas en cours d'exécution en tant que root! (UID: ${UID} EUID: ${EUID})"
exit 100
fi
if [ -f "${CHEMIN_NOUVEAU_RECEIPT}" ]; then
RECEIPT="${CHEMIN_NOUVEAU_RECEIPT}"
elif [ -f "${CHEMIN_ANCIEN_RECEIPT}" ]; then
RECEIPT="${CHEMIN_ANCIEN_RECEIPT}"
elif [ -f "${CHEMIN_RECU_BAK}" ]; then
RECEIPT="${CHEMIN_RECU_BAK}"
else
echo "Aucun des chemins de réception possibles n'a été trouvé... Abandon."
exit 101
fi
if [ -f "${CHEMIN_COMPAT_NOUVEAU_RECEIPT}" ]; then
COMPAT_RECEIPT="${CHEMIN_COMPAT_NOUVEAU_RECEIPT}"
elif [ -f "${CHEMIN_COMPAT_RECEIPT}" ]; then
COMPAT_RECEIPT="${CHEMIN_COMPAT_RECEIPT}"
elif [ -f "${CHEMIN_RECU_COMPAT_BAK}" ]; then
COMPAT_RECEIPT="${CHEMIN_RECU_COMPAT_BAK}"
else
COMPAT_RECEIPT=""
fi
# Stocker la liste des fichiers à supprimer en mémoire (pour ne pas dépendre de
# la lecture de fichiers que nous pourrions supprimer pendant le processus).
FICHIERS_A_SUPPRIMER="$(sh -c "lsbom -fls \"${RECEIPT}\" | colrm 1 1 | sed \"s/^/\\\"/\" | sed \"s/$/\\\"/\"")"
if [ ! -z "${COMPAT_RECEIPT}" ]; then
FICHIERS_A_SUPPRIMER="${FICHIERS_A_SUPPRIMER} $(sh -c "lsbom -fls "${COMPAT_RECEIPT} | colrm 1 1 | sed \"s/^/\\\"/\" | sed \"s/$/\\\"/\"")"
fi
# Retirer tous les attributs uchg des fichiers installés. Si présent, cet attribut
# empêchera la suppression des fichiers installés.
# (Pas besoin de vérifier la valeur de retour de chflags car nous voulons tenter la suppression
# de toute façon si chflags échoue.)
chflags -R nouchg "${REP_BUNDLE_FS}"
if [ -d "${REP_COMPAT_BUNDLE_FS}" ]; then
chflags -R nouchg "${REP_COMPAT_BUNDLE_FS}"
fi
chflags -R nouchg "${REP_PREFERENCE_PANE}"
chflags -R nouchg "${REP_STARTUP_ITEMS}"
chflags -R nouchg "${REP_DISK_MANAGER}"
sh -c "echo '${FICHIERS_A_SUPPRIMER}' | xargs chflags -R nouchg"
if [ -d "${CHEMIN_ANCIEN_BUNDLE_RECEIPT}" ]; then
chflags -R nouchg "${CHEMIN_ANCIEN_BUNDLE_RECEIPT}"
fi
if [ -d "${CHEMIN_COMPAT_BUNDLE_RECEIPT}" ]; then
chflags -R nouchg "${CHEMIN_COMPAT_BUNDLE_RECEIPT}"
fi
if [ -f "${CHEMIN_NOUVEAU_RECEIPT}" ]; then
chflags nouchg "${CHEMIN_NOUVEAU_RECEIPT}"
fi
if [ -f "${CHEMIN_PLIST_NOUVEAU_RECEIPT}" ]; then
chflags nouchg "${CHEMIN_PLIST_NOUVEAU_RECEIPT}"
fi
if [ -f "${CHEMIN_COMPAT_NOUVEAU_RECEIPT}" ]; then
chflags nouchg "${CHEMIN_COMPAT_NOUVEAU_RECEIPT}"
fi
if [ -f "${CHEMIN_PLIST_COMPAT_NOUVEAU_RECEIPT}" ]; then
chflags nouchg "${CHEMIN_PLIST_COMPAT_NOUVEAU_RECEIPT}"
fi
if [ -d "${REP_SUPPORT_APPLICATION}" ]; then
# Le reçu de sauvegarde se trouve dans ce répertoire, donc nous devons faire cela dans le bon
# ordre.
chflags nouchg "${REP_SUPPORT_APPLICATION}"
fi
if [ -f "${CHEMIN_RECU_BAK}" ]; then
chflags nouchg "${CHEMIN_RECU_BAK}"
fi
if [ -f "${CHEMIN_RECU_COMPAT_BAK}" ]; then
chflags nouchg "${CHEMIN_RECU_COMPAT_BAK}"
fi
# Supprimer les fichiers installés.
echo "Suppression des fichiers du paquet..."
sh -c "echo '${FICHIERS_A_SUPPRIMER}' | xargs rm -fv"
verifierErreurs $?
if [ -d "${REP_BUNDLE_FS}" ]; then
echo "Suppression du répertoire du bundle du système de fichiers..."
rm -rfv "${REP_BUNDLE_FS}"
verifierErreurs $?
fi
if [ -d "${REP_COMPAT_BUNDLE_FS}" ]; then
echo "Suppression du répertoire du bundle de fichier système de compatibilité..."
rm -rfv "${REP_COMPAT_BUNDLE_FS}"
verifierErreurs $?
fi
if [ -d "${REP_PREFERENCE_PANE}" ]; then
echo "Suppression du répertoire du panneau de préférences ${NOM_DU_DRIVER}..."
rm -rfv "${REP_PREFERENCE_PANE}"
verifierErreurs $?
fi
if [ -d "${REP_STARTUP_ITEMS}" ]; then
echo "Suppression du répertoire du gestionnaire de démarrage ${NOM_DU_DRIVER}..."
rm -rfv "${REP_STARTUP_ITEMS}"
verifierErreurs $?
fi
if [ -d "${REP_DISK_MANAGER}" ]; then
echo "Suppression du répertoire du gestionnaire de disque ${NOM_DU_DRIVER} Tuxera..."
rm -rfv "${REP_DISK_MANAGER}"
verifierErreurs $?
fi
# Supprimer tous les fichiers de reçu du paquet.
if [ -d "${CHEMIN_ANCIEN_BUNDLE_RECEIPT}" ]; then
echo "Suppression du reçu du paquet..."
rm -rfv "${CHEMIN_ANCIEN_BUNDLE_RECEIPT}"
verifierErreurs $?
fi
if [ -d "${CHEMIN_COMPAT_BUNDLE_RECEIPT}" ]; then
echo "Suppression du reçu de compatibilité du paquet..."
rm -rfv "${CHEMIN_COMPAT_BUNDLE_RECEIPT}"
verifierErreurs $?
fi
if [ -f "${CHEMIN_NOUVEAU_RECEIPT}" ]; then
echo "Suppression du fichier bom du reçu du paquet..."
rm -fv "${CHEMIN_NOUVEAU_RECEIPT}"
verifierErreurs $?
fi
if [ -f "${CHEMIN_PLIST_NOUVEAU_RECEIPT}" ]; then
echo "Suppression du fichier plist du reçu du paquet..."
rm -fv "${CHEMIN_PLIST_NOUVEAU_RECEIPT}"
verifierErreurs $?
fi
if [ -f "${CHEMIN_COMPAT_NOUVEAU_RECEIPT}" ]; then
echo "Suppression du fichier bom du reçu de compatibilité du paquet..."
rm -fv "${CHEMIN_COMPAT_NOUVEAU_RECEIPT}"
verifierErreurs $?
fi
if [ -f "${CHEMIN_PLIST_COMPAT_NOUVEAU_RECEIPT}" ]; then
echo "Suppression du fichier plist du reçu de compatibilité du paquet..."
rm -fv "${CHEMIN_PLIST_COMPAT_NOUVEAU_RECEIPT}"
verifierErreurs $?
fi
if [ -f "${CHEMIN_RECU_BAK}" ]; then
echo "Suppression du fichier bom de reçu de sauvegarde..."
rm -fv "${CHEMIN_RECU_BAK}"
verifierErreurs $?
fi
if [ -f "${CHEMIN_RECU_COMPAT_BAK}" ]; then
echo "Suppression du fichier bom de reçu de compatibilité de sauvegarde..."
rm -fv "${CHEMIN_RECU_COMPAT_BAK}"
verifierErreurs $?
fi
if [ -d "${REP_SUPPORT_APPLICATION}" ]; then
echo "Tentative de suppression du répertoire de support..."
rmdir "${REP_SUPPORT_APPLICATION}"
# Cela échouera s'il y a d'autres fichiers à l'intérieur, mais ce n'est pas grave.
fi
echo "Terminé."
exit 0