Как исправить зависание апгрейда с saucy->trusty: "Удаление ___ из Mono"
При недавнем обновлении с 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 ответа
Предыдущий ответ имеет опечатку, где он сказал, чтобы бежатьsudo sed -i -e 's/trusty/saucy/g; s/14.04.1/13.10/g; s/LTS//;'
но не сказал, к какому файлу применить это редактирование.
Я предполагаю, что они имели в виду /etc/lsb-release и редактирование этого файла (а также /etc/apt/sources.list, как показано) работало для меня.
PS На сайте сказано, что мне не хватает кармы или чего-то еще, чтобы опубликовать "комментарий", так что публикация этого "Ответа" (на самом деле комментарий) была единственным выбором...
Кроме того, вот сценарий, который автоматизирует повторяющуюся процедуру ps/run-hand-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
Процесс завис на 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
скрипты, которые зависали, запускали их вручную, а затем убивали зависший процесс. Мне приходилось делать это несколько раз во время обновления релиза:
Чинить
- Найди повешенного
prerm
или жеpostrm
Сценарий и запустить его вручную:eval "sudo $(ps xa -o cmd | grep 'postrm\|prerm' | grep -v grep)"
Вы должны увидеть вывод, похожий на:Removing libmono-addins-gui0.2-cil from Mono
за какой пакет висит. - Убей повешенных
prerm
или жеpostrm
сценарий:ps -ef | grep 'prerm\|postrm' | grep -v grep | awk '{ print $2 }' | xargs sudo kill -9
- Повторите для следующего зависшего пакета с сообщением:
Removing ___ from Mono
Если вы обнаружили ошибки:
Во время моего обновления я столкнулся с 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
Тогда ваш процесс обновления должен был потерпеть неудачу. Вам нужно будет принудительно выйти из программы обновления, вернуть все обратно к предыдущей версии, а затем перезапустить обновление:
- Если вы используете обновление GTK: нажмите Ctrl-C и скажите
Yes
на приглашение спросить, действительно ли вы хотите выйти.
Если это все еще не выходит... принудительно выйдите из этого с:ps -ef | grep do-release-upgrade | grep -v grep | awk '{ print $2 }' | xargs kill -9
- Сбросить ваш релиз обратно (например, я сбросил обратно
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"
- Перезапустите обновление с:
sudo do-release-upgrade