Bug 11667 - apt-* should test current working directory for existence and abort instantly when the check fails
: apt-* should test current working directory for existence and abort instantly...
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/apt)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-05-01 11:30 by
Modified: 2011-01-22 16:41 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-05-01 11:30:20
Когда запускаешь apt-cache, находясь в удалённой (стёртой, несуществующей) 
директории, то apt-cache обламывается с невразумительной ошибкой:

[root@radlinux mailfromd]# apt-cache search spam
rpmdb: no absolute path for the current directory: Нет такого файла или 
каталога
error: db4 error(2) from dbenv->open: Нет такого файла или каталога
error: cannot open Packages index using db3 - Нет такого файла или каталога (2)
E: невозможно открыть базу данных RPM


в приведённом примере директория mailfromd была убита предыдущим apt-get 
remove. Нужно, чтобы или apt-cache сообщал, что текущей директории не 
существует :) и предложил бы перезапустить себя по обретению пользователем 
существующего пути (это workaround) или бы нормально работал бы и в такой 
ситуации (имхо, в текущем пути нет ничего такого, чего нельзя было бы достать 
через абсолютные пути -- отталкиваться от pwd необязательно)
------- Comment #1 From 2007-05-02 04:35:55 -------
Не надо запускать программы типа apt-cache из несуществующих каталогов,
тем более что диагностика apt-cache оказалась более-менее понятной.

Мне кажется неразумным добавлять chdir("/") во все программы.
Некоторые, в т.ч. и apt-cache, принимают в качестве параметров пути к файлам,
поэтому chdir("/") для них неприемлем.
------- Comment #2 From 2007-05-02 10:05:58 -------
Дим, а он может просто выйти после "no absolute path for the current directory: 
Нет такого файла или каталога"?

Даже не так. Можно ли в apt-get, apt-cache в _самое_ начало вкрутить проверку 
условий (несуществующая директория, неверная операция, и т.п.)? И в случае 
ошибки выходить? А не считать всю базу, а потом говорить "неверная операция 
serach" или, как тут, отдавать rpmdb на откуп проверку текущей директории?

Это раз, и два -- oldpwd=pwd(); chdir("/") -- и работай сколько хочешь с путями 
файлов в параметрах, но при этом находясь в гарантированном месте. Нету места 
более гарантированного.
------- Comment #3 From 2007-05-05 04:52:12 -------
Я вот чего не понимаю: почему возникло желание добавлять проверку именно в
apt-get, а не в каждую программу, прямо или косвенно использующую текущий
каталог?  Почему, в конечном итоге, это лучше чем заблаговременно выполненный
"cd /", или, как заведено у демонов, chdir("/")?
------- Comment #4 From 2007-05-05 12:11:36 -------
Потому что пользовательские программы пишут для пользователей, а не для 
андроидов. Вразумительный репорт не должен (пусть косвенно) 
дезынформировать -- первая мысль, которая приходит в голову, глядя на репорт о 
том, что apt не может найти/открыть rpmdb -- это то, что rpmdb грохнулась 
нафик.

Потому что apt -- одна из ключевых программ проектов ALT. И с её поведением 
встречается каждый, кто использует наши проекты.

Чорт возьми, потому что у нас каждая первая ключевая программа возвращает 
ошибки в таком виде, что их только андроиды понять способны (hsh тому 
пример -- на очереди...). И это не в последнюю очередь влияет на мнение 
пользователей. И если кто-то оценивает в первую очередь по функционалу, а не 
по дружелюбности интерфейса -- хорошо, но для кого-то вразумительная 
диагностика такой же функционал.
------- Comment #5 From 2007-09-19 04:36:40 -------
Пользователи, которые не в состоянии понять диагностику "no absolute path for
the current directory: Нет такого файла или каталога", обычно не умеют
запускать
программы из удалённых каталогов.

Ну и, наконец, рабочий каталог может быть удалён прямо во время работы
процесса.
------- Comment #6 From 2007-09-19 06:22:37 -------
Ошибка не в том что диагностика недостаточна.
Ошибка в том, что после этой ошибки он не вываливается немедленно, а продолжает
пытаться работать и выводит ещё 3 _неправильных_ сообщения об ошибке.
------- Comment #7 From 2007-09-19 13:33:38 -------
apt-* should test current working directory for existence and abort instantly
when the check fails, to avoid subsequent errors.
------- Comment #8 From 2008-06-13 13:00:39 -------
*** This bug has been confirmed by popular vote. ***
------- Comment #9 From 2011-01-22 16:41:16 -------
Ошибка не воспроизводится. 

[cas@cas rem]$ ll `pwd`
ls: невозможно получить доступ к /home/cas/tmp/rem: Нет такого файла или
каталога
[cas@cas rem]$ apt-cache search dddd
[cas@cas rem]$