На недавнем обновлении из 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
Предыдущий ответ имеет опечатку, где он сказал для выполнения
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
Процесс держался 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
Во время моего обновления я встретился с 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
Затем Ваш процесс обновления, должно быть, перестал работать. Необходимо будет вызвать, выходит из программы обновления, вещи сброса назад к предшествующему выпуску, и затем перезапускают обновление:
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