Member
Статус: Не в сети Регистрация: 06.09.2005 Откуда: Москва
Вкратце опишу свою ситуацию: на прошедших выходных решил апгрейдить систему с Edgy на Feisty (не спрашивайте зачем, сам не понимаю). Сделал sudo apt-get update ; sudo apt-get dist-upgrade. Стоял всю ночь, скачал пакеты, приступил к установке. Как раз был очередной ГП Ф1 - святое дело, надо смотреть. Установка происходила в консоли. Переключаюсь я, значит, в иксы, запускаю tvtime - иксы виснут. Скорее всего, он был заменён и не был полностью совместим с текущей версий зорга. Процесс установки идёт, ящик значиццо не работает, смотреть надо, клавиатура унесена, удалёно подключиться не могу - reboot only. После ребута выяснилось, что не работает dpkg и похерена база данных установленных пакетов. По-идее, можно было бы поставить dpkg из исходников, а БД восстановить. К сожалению, как это сделать я не знаю. Вот и прошу совета, куда копать, чтобы не напороться на подобную ситуацию в дальнейшем?
В моём случае dpkg был полностью расконфигурирован, поэтому нужно было скачать его *.tar.gz и установить как обычно. Потом скачать пакет *.deb apt'а и установить его уже через dpkg. Следующим ходом будут две команды:
Код:
sudo dpkg --set-selections < /backup/installed-software.log sudo dselect # нажимаем там i и устанавливаем пакеты
Member
Статус: Не в сети Регистрация: 06.09.2005 Откуда: Москва
Полученный файл (/backup/installed-software.log) является просто списком установленных пакетов, в каждой строке лежит название пакета. По-идее, можно было бы написать небольшой скриптик:
Код:
#!/usr/bin/env sh for pkg_name in `cat /backup/installed-software.log` do apt-get install -f $pkg_name done
Но если в именах пакетов будут пробелы, то sh просто этого не поймёт. Поэтому предлагаю простое решение на питоне. Буду признателен, если кто-нибудь подскажет, как в sh вывести все строчки файла, чтобы каждая строка была окружена кавычками.
Код:
#!/usr/bin/env python import fileinput, os for pkg_name in fileinput.input ("/backup/installed-software.log"): result = os.popen ("apt-get install -f \"" + pkg_name + "\"")
Member
Статус: Не в сети Регистрация: 06.09.2005 Откуда: Москва
Пардон, сейчас только что обнаружил, что там идёт название пакета, а потом через ряд пробельных символов надпись: install
Значит, скрипт надо немног изменить. Скорее всего, пробелов в именах пакетов нет (а если есть, сборщиков надо побить). Поэтому лучше будет использовать решение на sh
Код:
#!/usr/bin/env sh for pkg_name in `cat /backup/installed-software.log` do if [ $pkg_name !== "install" ]; then apt-get install -f $pkg_name fi done
Решение на python перепишется так:
Код:
#!/usr/bin/env python import fileinput, os, re for pkg_name in fileinput.input ("/backup/installed-software.log"): a = re.search ("(.*?)\s*install", pkg_name) result = os.popen ("apt-get install -f \"" + a.group (1) + "\"")
Последний раз редактировалось Bozz Bishop 02.04.2007 14:55, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 08.03.2004 Откуда: Москва
Bozz Bishop писал(а):
Значит, скрипт надо немног изменить. Скорее всего, пробелов в именах пакетов нет (а если есть, сборщиков надо побить). Поэтому лучше будет использовать решение на
нету, ибо в apt имена пакетов разделяются пробелами.
_________________ Software is like a sex, it is better when it is free
Member
Статус: Не в сети Регистрация: 08.03.2004 Откуда: Москва
Bozz Bishop писал(а):
aptitude install -f $pkg_name
почему бы не --reinstall ? Я тут еще прикинул, а вообще какой смысл по одному ставить? aptitude прекрасно с зависимостями разбирается, если ему подсунуть сразу весь список пакетов - он только обрадуется.
_________________ Software is like a sex, it is better when it is free
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения