Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
Вкратце опишу свою ситуацию: на прошедших выходных решил апгрейдить систему с Edgy на Feisty (не спрашивайте зачем, сам не понимаю). Сделал sudo apt-get update ; sudo apt-get dist-upgrade. Стоял всю ночь, скачал пакеты, приступил к установке. Как раз был очередной ГП Ф1 - святое дело, надо смотреть. Установка происходила в консоли. Переключаюсь я, значит, в иксы, запускаю tvtime - иксы виснут. Скорее всего, он был заменён и не был полностью совместим с текущей версий зорга. Процесс установки идёт, ящик значиццо не работает, смотреть надо, клавиатура унесена, удалёно подключиться не могу - reboot only. После ребута выяснилось, что не работает dpkg и похерена база данных установленных пакетов. По-идее, можно было бы поставить dpkg из исходников, а БД восстановить. К сожалению, как это сделать я не знаю. Вот и прошу совета, куда копать, чтобы не напороться на подобную ситуацию в дальнейшем?



Партнер
 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
В общем, я поискал в инете и нашёл что можно сделать.
Для дист-апгрейда нужно написать небольшой скриптик, который нужно исполнять от имени рута
Код:
#!sh
dpkg --get-selections > /backup/installed-software.log # это и есть сохранение списка установленных пакетов
apt-get update
apt-get dist-upgrade

Назовём полученный файл distupgrade, выполним sudo chmod +x distupgrade

В моём случае dpkg был полностью расконфигурирован, поэтому нужно было скачать его *.tar.gz и установить как обычно. Потом скачать пакет *.deb apt'а и установить его уже через dpkg. Следующим ходом будут две команды:
Код:
sudo dpkg --set-selections < /backup/installed-software.log
sudo dselect # нажимаем там i и устанавливаем пакеты

Добавлено спустя 10 минут, 36 секунд
Сведения о бекапе найдены здесь (там есть и про rpm):
http://www.cyberciti.biz/tips/linux-get ... store.html

сейчас нужно найти способ организовать автоматическую переустановку пакетов без использования dselect.


 

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
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
получше изучил sed, новое решение на sh поэтому стало изящнее и сразу контролирует наличие пробелов (хотя их и не будет)
Код:
#!/usr/bin/env sh
for pkg_name in `sed -e 's/\([^\t]*\)[\t]*install$/"\1"/g' ` /backup/installed-software.log`; do
  aptitude install -f $pkg_name
done


Последний раз редактировалось Bozz Bishop 26.04.2007 14:22, всего редактировалось 1 раз.

 

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


 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
BaBL, можно наверное и все пакеты засунуть, получится так:
Код:
#!/usr/bin/env sh
tmp=`sed -e 's/\([^\t]*\)[\t]*install$/"\1"/g'`
aptitude install -f $tmp

а не reinstall просто потому, что база грохнулась а новая пуста - надо ставить заново.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 8 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan