Я использую этот скрипт для рекурсивной установки меток времени папок для последнего содержимого. (Это очень похоже на ответ Жиля):
#! /bin/bash
# Change mtime of directories to that of latest file (or dir) under it, recursively
# Empty leaf directories, or dirs with only symlinks get the $default_timestamp
default_timestamp='1980-01-01 00:00:00'
dir="$1"
[ -d "$dir" ] || { echo "Usage: $0 directory" >&2; exit 1; }
find "$dir" -depth -type d | while read d; do
latest=$(find "$d" -mindepth 1 -maxdepth 1 \( -type f -o -type d \) -printf '%T@ %p\n' | sort -n | tail -1 | cut -d' ' -f2-)
if [ -n "$latest" ]; then
touch -c -m -r "$latest" "$d" \
|| echo "ERROR setting mtime of '$d' using ref='$f'" >&2
else
touch -c -m -d "$default_timestamp" "$d" \
|| echo "ERROR setting mtime of '$d' to default '$default_timestamp'" >&2
fi
done
Похоже, это была проблема с кешем, хотя неясно, что пошло не так. После разговора с автором в чате, запуск yum clean all
устранил проблему.
Плакат отметил следующее:
[root@localhost yum]# ls /var/cache/yum/x86_64/7/nodesource/packages
nodejs-0.10.42-1nodesource.el7.centos.x86_64.rpm
[root@localhost yum]# yum clean all
[root@localhost yum]# ls /var/cache/yum/x86_64/7/nodesource/packages
[root@localhost yum]# yum install -y nodejs
.... much terminal output during successful install
[root@localhost yum]# node --version
v5.6.0
Итак, yum clean all
удалил устаревший пакет, который хранился в кэше.
У меня недостаточно знаний или опыта работы с дистрибутивами на основе Red Hat, чтобы сказать, что здесь пошло не так, поэтому я воздержусь от дальнейших комментариев.
yum
попытается получить версию, доступную в настроенных репозиториях, а не то, что вы хотите установить.
Установка пакетов, заменяющих официально предлагаемые версии, - верный способ, часто весьма хитроумный, исправить вашу систему. Кажется, ваш репозиторий nodejs пытается именно это. Более внимательно посмотрите на то, что доступно, что предлагает этот сторонний репозиторий и какие меры предосторожности существуют, чтобы избежать поломки.
Возможно, более разумным решением будет установка пакета только для вашей учетной записи, возможно, прямо из источника?
Вот что мне нужно было сделать ...
Во-первых, удалите пакет nodejs, установленный из EPEL:
sudo yum remove nodejs
Перечислите ваши репозитории yum:
yum repolist
Вот как выглядела моя запись репозитория узла:
nodesource / x86_64 Пакеты Node.js для Enterprise Linux 7 - x86_64
Если вам интересно, перечислите пакеты в репозитории узлов:
yum --disablerepo="*" --enablerepo="nodesource" list available
Затем выполните установку yum, используя только репозиторий узлов:
yum --disablerepo="*" --enablerepo="nodesource" install nodejs
Я подозреваю, что в схеме нумерации, используемой в репозитории узлов, есть что-то, что не представляет nodejs в качестве замены пакета в репозитории EPEL, но это всего лишь предположение.