LINUX.ORG.RU
решено ФорумAdmin

не хочет работать yum на centos 5

 , ,


0

1

Собственно задача не в yum, нужна поддержка json, а php на VPS стоит версии 5.1 попытка обновления/установки выдает сначала список доступных пакетов, но при попытку загрузки (y/N) дает такую ошибку.

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 261, in main return_code = base.doTransaction() File «/usr/share/yum-cli/cli.py», line 398, in doTransaction problems = self.downloadPkgs(downloadpkgs, callback_total=self.download_callback_total_cb) File «/usr/lib/python2.4/site-packages/yum/__init__.py», line 1315, in downloadPkgs remote_size += po.size TypeError: unsupported operand type(s) for +=: 'int' and 'str'

чистил логи yum, через rpm пробовал удалить и переустановить yum, ничего не помогло. Судя по последней строке python не хочет скачивать ссылаясь на невозможность сложить строку и число для получения общего размера.

угу, видел такое. Красношапка во всей красе.

Я бы попробовал следующее:

1) проверить сетевое подключение, у меня было такое в локалке с бешеный фаерволом и captive portal

2) присосать свежий yum в rpm.

3) включить дебаг-логгирование, там часто можно увидеть ошибки которые приводят к такому внешнему проявлению

true_admin ★★★★★ ()

Обновить pyhton через rpm не вышло,

Да пыхтон он такой, его вообще ничем обновить нельза. А если серьезно, то не поможет. Это косяк yum.

Можно просто скачать нужную rpm и поставить руками.

baverman ★★★ ()
Ответ на: комментарий от dbzer0
 
 remote_size = 0
        for po in pkglist:
            if hasattr(po, 'pkgtype') and po.pkgtype == 'local':
                continue
                    
            local = po.localPkg()
            if os.path.exists(local):
                if not self.verifyPkg(local, po, False):
                    if po.repo.cache:
                        repo_cached = True
                        adderror(po, _('package fails checksum but caching is '
                            'enabled for %s') % po.repo.id)
                else:
                    self.verbose_logger.debug(_("using local copy of %s") %(po,))
                    continue
                        
            remote_pkgs.append(po)
	    remote_size += po.size

            # caching is enabled and the package 
            # just failed to check out there's no 
            # way to save this, report the error and return

Питон целиком сносить? там зависимостей куча, ничего не сдохнет?

ivanov_vik ()
Ответ на: комментарий от ivanov_vik

Питон целиком сносить? там зависимостей куча, ничего не сдохнет?

Пол системы сляжет, не сносите.

dbzer0 ()
Ответ на: комментарий от ivanov_vik

Добавьте

После строки:

remote_pkgs.append(po)

строку:

if type(po.size).__name__ != 'int': po.size = 0

чтобы получилось так:

remote_pkgs.append(po)
if type(po.size).__name__ != 'int': po.size = 0
remote_size += po.size

dbzer0 ()
Ответ на: комментарий от dbzer0

if type(po.size).__name__ != 'int'

омг, тогда уж

if type(po.size) != int: ...
#вариант 2, думаю более pep8
if type(po.size) is not int: ... 
Ещё я бы посмотрел что там за значение лежит, может там поможет po.size = int(po.size)

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

да, в правильном направлении думал- я с преобразованием строк int() ковырялся. прошла установка, потом еще похожая ошибка на 1376. поставил

remote_size += int(po.size) 
в обоих местах - yum заработал. Всем спасибо.

ivanov_vik ()
Ответ на: комментарий от ivanov_vik

Не совсем правильно, у вас тут так же возможна исключительная ситуация, если вдруг po.size станет None

dbzer0 ()
Ответ на: комментарий от dbzer0

я так и не понял что ты хотел сказать. Если ты сравнение типов делаешь через преобразование в строки то у тебя проблемы с пониманием питона.

true_admin ★★★★★ ()
Ответ на: комментарий от dbzer0

кстати, во втором питоне оно может внезапно превратиться в long. И т.к. одно не является подклассом другого то никакой isinstance не поможет. Так что я бы сделал if type(var) is in [int, long] ...

true_admin ★★★★★ ()
Ответ на: комментарий от vint21h

думал над этим, решил что пофиг потому что от int никто не наследуется. Но ты прав, в общем случае так лучше, это соотв. pep8

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

преобразование в строки

Где я делал «преобразование строки»?

кстати, во втором питоне оно может внезапно превратиться в long. И т.к. одно не является подклассом другого то никакой isinstance не поможет.

Сюрприз-сюрприз в питоне любой элемент - это объект, даже ключевые слова являются «подклассом другого».

Так что я бы сделал if type(var) is in [int, long] ...

А вот с long, согласен.

dbzer0 ()
Ответ на: комментарий от dbzer0

Где я делал «преобразование строки»?

Я ошибся, ты взял готовый атрибут. В любом случае не делай так. Если не понятно почему так делать не надо создай отдельный топик в Development.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

омг, тогда уж

if type(po.size) != int: ...
#вариант 2, думаю более pep8
if type(po.size) is not int: ... 

Мда, наверное, заработался, я вначале показалось что у вас

if type(po.size) != 'int': ...
Вы правы, так лучше.

dbzer0 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.