Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Debian GNU/Linux -> Удаление неудаляемог...

Удаление неудаляемого deb-пакета

  Случилось так, что стукнуло мне в голову установить deb-пакет не из репозитория, и не собранный лично. Помимо ругани dpkg на неудовлетвороённые зависимости я получил неудаляемый пакет :о(. Ни через синаптик, ни через dpkg... Ругается на невозможность выполнить скрипты пред/пост установочные/удалительные (во как завернул-то, а).
Но мы же живём где? Правильно, в Linux. Потому отключаем автопилот и переходим на ручное управление - консоль и текстовый редактор.

С правами root или через sudo открываем на редактирование несколько файлов и удаляем целиком блоки (они разделены пустой сторокой), связанные с нашим "битым" пакетом.

Файлы, подлежащие редактированию, пишу в столбик:

/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/statoverride
/var/lib/dpkg/status-old
/var/lib/dpkg/available-old
/var/lib/dpkg/statoverride-old

После чистки данных файлов программа физически остаётся установленной (не правильно установленной), но упоминаний о ней в менеджерах пакетов уже не будет - эдакая программа-фантом.

Пример блока для пакета alarm-clock-applet:

Package: alarm-clock-applet
Status: install ok installed
Priority: optional
Section: gnome
Installed-Size: 840
Maintainer: Chow Loong Jin <hyperair@ubuntu.com>
Architecture: i386
Version: 0.3.1-1
Depends: libc6 (>= 2.7), libgconf2-4 (>= 2.27.0), libglib2.0-0 (>= 2.20.0), libgstreamer0.10-0 (>= 0.10.7), libgtk2.0-0 (>= 2.18.0), libnotify1 (>= 0.4.5), libnotify1-gtk2.10, libunique-1.0-0 (>= 1.0.0), libxml2 (>= 2.7.4), gconf2 (>= 2.28.1-2)
Description: Alarm Clock applet
 Alarm Clock is a fully-featured alarm clock which resides in the notification
 area It is easy to use yet powerful with support for multiple and repeatable
 alarms, as well as snoozing and a flexible notification system.
 .
 Two types of alarms are supported: Alarm Clocks and Timers.
 Notification is done by either playing a sound or launching an
 application.
Homepage: http://alarm-clock.pseudoberries.com/

От строки Package: alarm-clock-applet до следующего Package: .... - это блок.

Теперь не мешало бы и сам пакет "прибить".

Для этого нужно взять "битый" deb, который пытались установить и распаковать его.

Маленькое отступление для объяснения содержимого deb-пакета.

Начиная с Debian версии 0.93, deb файл представляет собой архив tar. Обычно архив содержит 3 файла:
  • debian-binary: версия формата deb-пакета. Она равняется «2.0» для текущих версий Debian
  • control.tar.gz: вся информация о пакете и скрипты, выполняемые до/после установки/удаления
  • data.tar или data.tar.gz или data.tar.bz2 или data.tar.lzma: устанавливаемые файлы
Затем распаковать архив data....
В этом архиве должны быть файлы и каталоги, подлежащие установке с соблюдением дерева каталогов.
Т.е. нам нужно подсмотреть, куда была попытка распихать файлы, и удалить их из системы, если таковые имеют место быть.
Данная процедура может занять много времени - зависит от количества файлов и каталогов в "битом" deb-пакете.

Но можно упростить себе задачу, используя мощь консоли - конвейер.

Распаковывать ничего не надо, а просто заходим терминалом в каталог, где лежит "битый" deb-пакет, который не установился. Получаем права root и выполняем вот такую последовательность (вбивается одной строкой):

for i in `echo $(dpkg-deb -c ./alarm-clock-applet_0.3.1-1_i386.deb | awk '{ print $6 }'| sed -e s/^.//)`; do if [ -f "$i" ]; then rm -f $i; fi; done

Соответственно, вместо alarm-clock-applet_0.3.1-1_i386.deb необходимо вбивать имя вашего пакета.


Конвейер опасный - удаляет файлы не спрашивая ничего!!!


Всё! Должно сработать!
Все операции проводились в Debian-6 Squeeze - помогло!

Немного объясню, что происходит в нашем конвейере.

dpkg-deb -c - выдаёт список всех каталогов и файлов, подлежащих установке из указанного пакета,
awk - выделяет нам шестое поле, содержащее относительные пути от текущего места расположения к файлам и каталогам, полученным в результате работы dpkg-deb,
sed - удаляет точку в начале полученных относительных путей,
if - условный оператор; проверяет файл ли мы собираемся удалять и, если это так, то удаляем его с помощью rm. Каталоги удалять не будем - мало ли, что в них было помимо наших файлов.




Опубликовано: foxadmin, Автор/источник: Сакрюкин К.В. 20 Январь 2012 15:54:16

Комментировать

Вы не залогинены! Регистрация

Афоризмы, мысли

"Не согласен - критикуй, критикуешь - предлагай, предлагаешь - делай, делаешь - отвечай!"

/Сталин И.В./

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов3572 
Сегодня хитов3572 
Сегодня хостов652 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 0.4
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!