В ходе обновления yum может выдавать ошибки "thread.error: can't start new thread" или "MemoryError", yum зависает, глючит и не работает.
Рецепты типа "yum --noplugins ..." использовать yum без плагинов, "rpm -qV yum" (не должно быть никакого результата) проверить не испорчен ли пакет yum, проверка конфигов на наличие нестандартных символов или опечаток - неканает.
[root@localhost ~]# yum update Loaded plugins: fastestmirror, priorities, security, versionlock Determining fastest mirrors Traceback (most recent call last): File "/usr/bin/yum", line 29, in ? yummain.user_main(sys.argv[1:], exit_code=True) File "/usr/share/yum-cli/yummain.py", line 309, in user_main errcode = main(args) File "/usr/share/yum-cli/yummain.py", line 178, in main result, resultmsgs = base.doCommands() File "/usr/share/yum-cli/cli.py", line 345, in doCommands self._getTs(needTsRemove) File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 101, in _getTs self._getTsInfo(remove_only) File "/usr/lib/python2.4/site-packages/yum/depsolve.py", line 112, in _getTsIn fo pkgSack = self.pkgSack File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 662, in pkgSack = property(fget=lambda self: self._getSacks(), File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 502, in _getSack s self.repos.populateSack(which=repos) File "/usr/lib/python2.4/site-packages/yum/repos.py", line 232, in populateSac k self.doSetup() File "/usr/lib/python2.4/site-packages/yum/repos.py", line 79, in doSetup self.ayum.plugins.run('postreposetup') File "/usr/lib/python2.4/site-packages/yum/plugins.py", line 179, in run func(conduitcls(self, self.base, conf, **kwargs)) File "/usr/lib/yum-plugins/fastestmirror.py", line 181, in postreposetup_hook all_urls = FastestMirror(all_urls).get_mirrorlist() File "/usr/lib/yum-plugins/fastestmirror.py", line 333, in get_mirrorlist self._poll_mirrors() File "/usr/lib/yum-plugins/fastestmirror.py", line 376, in _poll_mirrors pollThread.start() File "/usr/lib/python2.4/threading.py", line 416, in start _start_new_thread(self.__bootstrap, ()) thread.error: can't start new thread --- [root@localhost ~]# yum --noplugins install ntp Setting up Install Process Traceback (most recent call last): File "/usr/bin/yum", line 29, in ? File "/usr/share/yum-cli/yummain.py", line 309, in user_main File "/usr/share/yum-cli/yummain.py", line 178, in main File "/usr/share/yum-cli/cli.py", line 349, in doCommands File "/usr/share/yum-cli/yumcommands.py", line 181, in doCommand File "/usr/share/yum-cli/cli.py", line 583, in installPkgs File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 2713, in install File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 675, in File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 559, in _getUpda tes File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 432, in simpl ePkgList File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 482, in _comp uteAggregateListResult File "/usr/lib/python2.4/site-packages/yum/packageSack.py", line 858, in simpl ePkgList File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 1210, in retur nPackages File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 44, in newFunc File "/usr/lib/python2.4/site-packages/yum/sqlitesack.py", line 1194, in _buil dPkgObjList MemoryError
Результат вывода top показал, что CentOS не хочет использовать swap (файл подкачки) даже при самых пиковых нагрузках на оперативную память, который при установке был создан размером в 256 МБ.
Swap: ... 0 used, но почему?;( А возможно потому, что размер swap-а (файла подкачки) был меньше, чем размер оперативной памяти * 2 (256*2=512) - хотя и не факт, возможно это глюк CentOS 5. В минимальные системные требования для CentOS 5 "128M CLI/512M GUI per logical CPU" мы уложились.
После добавления к файлу подкачки ещё одного куска размером в 256 МБ файл подкачки начал использоватся, а yum перестал выдавать "thread.error: can't start new thread" или "MemoryError". Если у Вас та же "байда" и по результатам вывода top "Swap: ... 0 used", а "Swap: ... total" не равен двум объемам оперативной памяти, тогда добавляем размера файлу подкачки:
[root@localhost ~]# pwd /root [root@localhost ~]# dd if=/dev/zero of=swap.file bs=1M count=256 256+0 records in 256+0 records out 268435456 bytes (268 MB) copied, 5.52518 seconds, 48.6 MB/s [root@localhost ~]# mkswap swap.file Setting up swapspace version 1, size = 268431 kB [root@localhost ~]# swapon swap.file [root@localhost ~]# vi /etc/rc.local swapon /root/swap.file
Для автоматического подключения нашего дополнительного файла подкачки после каждой перезагрузки, нужно добавить "swapon /root/swap.file" в "/etc/rc.local"!
Ещё упомянутый выше глюки могут возникать из-за лимита на использование "virtual memory", ниже лимиты для CentOS 5 по умолчанию:
[root@localhost ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 3938 max locked memory (kbytes, -l) 32 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 3938 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
Если у Вас значение лимита "virtual memory" не unlimited, тогда смените его командой "ulimit -v unlimited" и заодно "ulimit -m unlimited" для "max memory size".
В борьбе с зависанием yum иногда может помочь "rpm --createdb" пересборка БД пакетов /var/lib/rpm/Packages или такое заклинание:
yum clean all rm -f /var/lib/rpm/__db* rpm --rebuilddb yum update
Если возникла необходимость переустановить yum, то сначала находим xxxxx.rpm пакет, удаляем без зависимостей и устанавливаем снова:
rpm -e --nodeps --justdb yum rpm -ivh xxxxx.rpm yum update
Есть проблемы с yum? Пишем в комментарии...