Bug 11667

Summary: apt-* should test current working directory for existence and abort instantly when the check fails
Product: Sisyphus Reporter: Peter V. Saveliev <peet>
Component: aptAssignee: placeholder <placeholder>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: boyarsh, cas, evg, glebfm, imz, ldv, placeholder
Version: unstable   
Hardware: all   
OS: Linux   

Description Peter V. Saveliev 2007-05-01 11:30:20 MSD
Когда запускаешь 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 Dmitry V. Levin 2007-05-02 04:35:55 MSD
Не надо запускать программы типа apt-cache из несуществующих каталогов,
тем более что диагностика apt-cache оказалась более-менее понятной.

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

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

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

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

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

Ну и, наконец, рабочий каталог может быть удалён прямо во время работы процесса.
Comment 6 Denis Smirnov 2007-09-19 06:22:37 MSD
Ошибка не в том что диагностика недостаточна.
Ошибка в том, что после этой ошибки он не вываливается немедленно, а продолжает
пытаться работать и выводит ещё 3 _неправильных_ сообщения об ошибке.
Comment 7 Dmitry V. Levin 2007-09-19 13:33:38 MSD
apt-* should test current working directory for existence and abort instantly
when the check fails, to avoid subsequent errors.
Comment 8 Mikhail Gusarov 2008-06-13 13:00:39 MSD

    
Comment 9 Andrey Cherepanov 2011-01-22 16:41:16 MSK
Ошибка не воспроизводится. 

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