Volodymyr Mutel ([personal profile] muwlgr) wrote2018-01-17 05:55 pm

Ubuntu 16.04 : обновление с 32 до 64 бит

В Ubuntu 14.04 всё было немного проще ( https://muwlgr.dreamwidth.org/42768.html )
В списках пакетов Ubuntu 16.04 прописаны конфликты между 32- и 64-битными версиями одного и того же пакета, так что через apt оно массово обновляться отказывается. Приходится загружать пакеты через apt download и ставить их через dpkg -i

Начальные заклинания аналогичны :
sudo -s
dpkg --get-selections > pkg1
dpkg --add-architecture amd64
apt update
apt install linux-image-generic:amd64 thermald 
# иначе оно захочет установить 64-битный thermald и не сможет его перезапустить
reboot

после загрузки с 64-битным ядром :
sudo -s
unset LANG
apt install apt:amd64 apt-utils:amd64
# Yes, do as I say!
mkdir /tmp/upgrade 
cd /tmp/upgrade
pkgs() { dpkg -l | awk '$4=="'$1'"{print $2}' | awk -F: '{print $1}' | sort -u
}
apt download $(comm -23 <(pkgs i386) <(pkgs amd64))
while ls *amd64*deb
do dpkg -i *amd64*deb
   dpkg -l | awk '$1=="ii" && $4=="amd64" {print $2}' | awk -F: '{print $1}' |
   while read a
   do [ -f ${a}_*amd64*deb ] && rm ${a}_*amd64*deb
   done
done
reboot

В цикле мы повторяем установку пакетов и удаляем файлы пакетов, которые установились успешно и получили в списке dpkg состояние ii
Цикл приходится повторить несколько раз, т.к. не все пакеты устанавливаются успешно с первого раза

После этого можно перезапустить систему со всем 64-битным софтом и снести все 32-битные пакеты:
dpkg --purge $(dpkg -l | awk '$4=="i386"{print $2}')

Сохранённым списком пакетов в pkg1 можете пользоваться по своему усмотрению