On Sun, 19 Jul 2009, Szymon Janc wrote: > I've seen this bug report and at the begining I thought the same, but there > is > no directory in my /var/lib/dpkg/alternatives..
Can you run "sh -e -x dpkg.preinst upgrade 1.15.2" with the attached script and send me the output? Also send me the content of the last alternatives file read by the script (will be visible in the log). I expect one of the files to be broken and have an inconsistent number of lines... which could lead to a read call failing. I'll fix that shortly. > -rw-r--r-- 1 root root 31 2008-02-26 java-rmi.cgi > -rw-r--r-- 1 root root 26 2008-07-21 java_vm > -rw-r--r-- 1 root root 27 2008-07-21 jcontrol One of those very short files could be at fault maybe. Cheers, -- Raphaël Hertzog Contribuez à Debian et gagnez un cahier de l'admin Debian Lenny : http://www.ouaza.com/wp/2009/03/02/contribuer-a-debian-gagner-un-livre/
#!/bin/sh -e # This script can be called in the following ways: # # Before the package is installed: # <new-preinst> install # # Before removed package is upgraded: # <new-preinst> install <old-version> # # Before the package is upgraded: # <new-preinst> upgrade <old-version> # # # If postrm fails during upgrade or fails on failed upgrade: # <old-preinst> abort-upgrade <new-version> # Handle upgrades from pre-conffile dpkg.cfg upgrade_dpkg_non_conffile() { if [ -r /etc/dpkg/dpkg.cfg ]; then dpkg_cfg_md5="535552ad5ee9145dbc7a34c264df4e59 /etc/dpkg/dpkg.cfg" if echo "$dpkg_cfg_md5" | md5sum -c >/dev/null 2>&1; then echo "Removing non-modified dpkg.cfg to be replaced by a conffile ..." rm -f /etc/dpkg/dpkg.cfg fi fi } kill_bad_alternatives () { local IFS="" ALTDIR="/var/lib/dpkg/alternatives" for alt in $ALTDIR/*; do if [ ! -f $alt ]; then # In case it's been removed by the code below, or in case # it's not a real file continue fi { read mode read mainlink while true; do read slave if [ "$slave" = "" ]; then break fi if [ -e "$ALTDIR/$slave" ]; then echo "Removing conflicting master alternative $slave (it is slave of $(basename $alt))..." rm -f "$ALTDIR/$slave" fi read slavelink done } <$alt done } case "$1" in install) ;; upgrade) # Cleanup bad alternatives that would choke with new # update-alternatives (see #530633, #531611, #532739, #521760) if dpkg --compare-versions "$2" lt 1.15.3; then kill_bad_alternatives fi case "$2" in # Upgrade from pre-conffile dpkg.cfg 1.9.21 | 1.10.* ) upgrade_dpkg_non_conffile ;; esac ;; abort-upgrade) ;; *) echo "$0 called with unknown argument \`$1'" 1>&2 exit 1 ;; esac #DEBHELPER# exit 0