В моей ubuntu x64 накрылся skype и wine после неаккуратного обновления. Заново ставиться они отказались:
# apt-get install wine --no-install-recommends
Пакеты, имеющие неудовлетворённые зависимости:
wine : Зависит: wine1.5 но он не будет установлен
E: Невозможно исправить ошибки, у вас отложены (held) битые пакеты.
Наверное, это связано с тем, что я впихнул в систему несколько ppa и kubuntu-experimental - где-то зависимости между пакетами оказались конфликтующими. Если разрешать руками через aptitude, всё упирается в конфликт libc и libc:i386.
Так я открыл для себя
debootstrap.
Открыл вот здесь:
http://ubuntuforums.org/showthread.php?t=24575.
Сам сделал так:
sudo -s
mkdir /home/32bit
debootstrap --arch i386 precise /home/32bit/
http://archive.ubuntu.com/ubuntumkdir /32bit
echo <<< '
/home/32bit /32bit none auto,bind 0 0
/dev /32bit/dev none bind 0 0
/sys /32bit/sys none bind 0 0
/proc /32bit/proc none bind 0 0
/home /32bit/home none bind 0 0
' >> /etc/fstab
mount -a
cp /etc/passwd /32bit/passwd # Чтобы делать su в себя
linux32 chroot /32bit
add-apt-repository ppa:ubuntu-wine/ppa
add-apt-repository ppa:upubuntu-com/chat # skype ppa
apt-get install -y wine skype
exit # leave chroot
echo '32bit /32bit linux32' >> /etc/dchroot.conf
exit # leave root shell
# от пользователя-не-root:
dchroot "DISPLAY=$DISPLAY LANG=$LANG skype"
dchroot "cd ~/.wine/drive_c/h3; LANG=$LANG DISPLAY=$DISPLAY ./Heroes3.exe"
chroot получился размером 1.2 ГиБ. Не самое экономное решение. С другой стороны, проще поставить и забыть. skype всё равно 32-битный и много с собой тянет; библиотеки в память в любом случае засунет 32-битные. wine - тоже, даром что исходники открыты.
В /usr/bin/wine отправился скриптег:
#!/bin/bash
args=""
for i in "$@" ; do
# строка ниже делает exe-файлам полные пути
if [[ "${i##*.}" == exe ]]; then i="$PWD/$i"; fi
args="$args '$i'"
#echo $args
done
dchroot -- DISPLAY=$DISPLAY LANG=ru_RU.UTF-8 "$0" $args
Скайп остался алиасом:
$ type skype
skype является алиасом для `dchroot "DISPLAY=$DISPLAY skype"'
Вообще, этот скрипт можно положить вместо любого бинарника, который должен запускаться из чрута, и будет счастье. Только строчку про exe убрать. Скрипт должен лежать по тому же полному пути, что и бинарник внутри чрута. Ну или можно использовать $(basename $0) вместо $0, тогда полный путь будет не важен.