Как зафиксировать обновление, зависают от дерзкого-> надежный человек: “Удаление ___ от Моно”

На недавнем обновлении из Ubuntu 13.10 (дерзкой) к 14.04.1 LTS (надежный человек), процесс продолжал зависать в нескольких prerm и postrm сценарии для удаления Моно пакетов. Признак проблемы является сообщениями как следующее в dpkg вывод (/var/log/dist-upgrade/apt-term.log при использовании ubuntu-release-upgrader):

$ egrep -B1 'Removing.+ from Mono' /var/log/dist-upgrade/apt-term.log

Preparing to unpack .../libdbus1.0-cil_0.7.0-5ubuntu1_all.deb ...
Removing libdbus1.0-cil from Mono
--
Preparing to unpack .../libdbus-glib1.0-cil_0.5.0-4ubuntu1_all.deb ...
Removing libdbus-glib1.0-cil from Mono
--
Preparing to unpack .../libgdata2.1-cil_2.2.0.0-2_all.deb ...
Removing libgdata2.1-cil from Mono
--
Preparing to unpack .../libmono-addins0.2-cil_1.0+git20130406.adcd75b-3_all.deb ...
Removing libmono-addins0.2-cil from Mono
--
Preparing to unpack .../libnotify0.4-cil_0.4.0~r3032-7_all.deb ...
Removing libnotify0.4-cil from Mono
--
Preparing to unpack .../libtaglib2.1-cil_2.1.0.0-3_all.deb ...
Removing libtaglib2.1-cil from Mono
--
Preparing to unpack .../libmono-addins-gui0.2-cil_1.0+git20130406.adcd75b-3_all.deb ...
Removing libmono-addins-gui0.2-cil from Mono
2
задан 29 September 2014 в 22:16

2 ответа

Предыдущий ответ имеет опечатку, где он сказал для выполнения
sudo sed -i -e 's/trusty/saucy/g; s/14.04.1/13.10/g; s/LTS//;'
, но не сказал что файл применить то редактирование к.

Мое предположение - то, что они имели в виду/etc/lsb-release и редактирование, что файл (а также/etc/apt/sources.list как показано) работал на меня.

P.S. Веб-сайт сказал, что у меня не было достаточной кармы или независимо от того, что для добавления "комментария", таким образом отправляя этот "Ответ" (действительно комментарий) было единственным выбором...

кроме того, вот сценарий, который автоматизирует repetive ps/run-by-hand/kill, процедура, описанная в предыдущем ответе (выполняйте сценарий так же много раз по мере необходимости для заканчивания подвешивания)

#!/bin/sh
set -e -u
unset GREP_OPTIONS GREP_COLOR GREP_COLORS
line=$(ps xa -o pid,cmd | grep 'postrm\|prerm' | grep -v grep)
[ -n "$line" ] || { echo "No postrm/prerm cmd is running now." >&2; exit 1; }
pid=$( echo "$line" | sed -ne 's/^ *\([0-9][0-9]*\) .*/\1/p' )
cmd=$( echo "$line" | sed -ne 's/^ *[0-9][0-9]* *//p' )
eval "sudo $cmd"
echo -n "Kill pid $pid ? "
read reply
case "$reply" in
 [yY]*) (set -x; sudo kill $pid)
        && sleep 1 \
        && sudo kill $pid >/dev/null \
        && (set -x; sudo kill -9 $pid)
        ;;
esac
1
ответ дан 6 October 2019 в 15:00

Процесс держался prerm и postrm сценарии для следующих пакетов:

Preparing to unpack .../libdbus1.0-cil_0.7.0-5ubuntu1_all.deb ...
Removing libdbus1.0-cil from Mono
--
Preparing to unpack .../libdbus-glib1.0-cil_0.5.0-4ubuntu1_all.deb ...
Removing libdbus-glib1.0-cil from Mono
--
Preparing to unpack .../libgdata2.1-cil_2.2.0.0-2_all.deb ...
Removing libgdata2.1-cil from Mono
--
Preparing to unpack .../libmono-addins0.2-cil_1.0+git20130406.adcd75b-3_all.deb ...
Removing libmono-addins0.2-cil from Mono
--
Preparing to unpack .../libnotify0.4-cil_0.4.0~r3032-7_all.deb ...
Removing libnotify0.4-cil from Mono
--
Preparing to unpack .../libtaglib2.1-cil_2.1.0.0-3_all.deb ...
Removing libtaglib2.1-cil from Mono
--
Preparing to unpack .../libmono-addins-gui0.2-cil_1.0+git20130406.adcd75b-3_all.deb ...
Removing libmono-addins-gui0.2-cil from Mono
--
Preparing to unpack .../libappindicator0.1-cil_12.10.1+13.10.20130920-0ubuntu4_all.deb ...
Removing libappindicator0.1-cil from Mono
--
Preparing to unpack .../libgmime2.6-cil_2.6.20-0ubuntu1_all.deb ...
Removing libgmime2.6-cil from Mono
--
Setting up mono-gac (3.2.8+dfsg-4ubuntu1) ...
* Installing 3 assemblies from libappindicator0.1-cil into Mono

Для принуждения удаления пакетов я определил prerm и postrm сценарии, которые зависали, выполнили их вручную и затем уничтожили подвешенный процесс. Я должен был сделать это многократно во время обновления версии:

Зафиксировать

  1. Найдите подвешенный prerm или postrm сценарий и выполненный это вручную:

    eval "sudo $(ps xa -o cmd | grep 'postrm\|prerm' | grep -v grep)"

    Необходимо видеть вывод, подобный: Removing libmono-addins-gui0.2-cil from Mono поскольку, какой бы ни пакет зависает.
  2. Уничтожьте подвешенный prerm или postrm сценарий:

    ps -ef | grep 'prerm\|postrm' | grep -v grep | awk '{ print $2 }' | xargs sudo kill -9
  3. Повторитесь на следующем подвешенном пакете с сообщением: Removing ___ from Mono

Если Вы встречаетесь с ошибками:

Во время моего обновления я встретился с a postinst отказ сценария для одного из моно пакетов (mono-gac... больше как mono-gack!!). Я выполнил свою первоначальную процедуру выше, кроме с этим postinst сценарий. Однако это вызвало меня проблема, которая уничтожила мое обновление и оставила утилиту обновления в нарушенном состоянии.

Ошибки от моего журнала обновления были (отредактированный для краткости... посмотрите полный журнал здесь):

Errors were encountered while processing:
 mono-gac
 mono-runtime-common
 mono-runtime-sgen
 mono-runtime
 libmono-corlib4.5-cil
[...SNIP...]
 libmono-csharp4.0c-cil
 gbrainy
 libdbus1.0-cil
 libdbus-glib1.0-cil
 libgdata2.1-cil
 libmono-addins0.2-cil
 libdbus2.0-cil
 libdbus-glib2.0-cil
 libnotify0.4-cil
 libtaglib2.1-cil
 banshee
 banshee-extension-soundmenu
 libmono-addins-gui0.2-cil
 libmono-simd4.0-cil
Processing was halted because there were too many errors.
Log ended: 2014-09-29  14:27:33

Затем Ваш процесс обновления, должно быть, перестал работать. Необходимо будет вызвать, выходит из программы обновления, вещи сброса назад к предшествующему выпуску, и затем перезапускают обновление:

  1. Если Вы используете средство обновления выпуска GTK: Нажмите Ctrl-C и скажите Yes к подсказке, спрашивающей, хотите ли Вы действительно выйти.

    Если это все еще не выходит... из силы, выходит из него с:

    ps -ef | grep do-release-upgrade | grep -v grep | awk '{ print $2 }' | xargs kill -9
  2. Сбросьте свой выпуск назад (например, я сбросил назад к saucy выпуск от trusty):

    sudo sed -i -e 's/trusty/saucy/' /etc/apt/sources.list

    sudo sed -i -e 's/trusty/saucy/g; s/14\.04\.1/13.10/g; s/LTS//; /etc/lsb-release

    Например, Ваш файл должен быть похожим:

DISTRIB_ID=Ubuntu DISTRIB_RELEASE=13.10 DISTRIB_CODENAME=saucy DISTRIB_DESCRIPTION="Ubuntu 13.10"

  1. Повторно выполните обновление с: sudo do-release-upgrade
3
ответ дан 2 December 2019 в 02:24

Другие вопросы по тегам:

Похожие вопросы: