Maple11 + Ubuntu 8.04
При установке Maple 11 для Linux в Ubuntu 8.04 имеется следующая проблема: не запускается инсталлятор благодаря багу jvm и xorg 7.3.
Вывод ошибки примерно следующий:
java: xcb_xlib.c:82: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
Aborted (core dumped)
Как подсказывает гугль - этот баг jre вполне известен и имеется патч для его решения.
И всё бы хорошо, если бы инсталлятор Maple использовал системную jre.
Увы, но это не так. Посему приходится идти на кое-какие ухищрения...
Инсталлятор Maple(в моём случае это был один файл - sh-скрипт) в процессе установки распаковывает своё содержимое(в том числе и jre) в директорию вида /tmp/install.dir.XXXXX.
Таким образом в промежуток времени между тем, как распакован jre и начинается запуск самого инсталлятора вполне есть возможность пропатчить нужные файлы.
Итак по пунктам:
1) Создаём скрипт вида:
#!/bin/sh
echo "Patching";
LIB_TO_PATCH=libmawt.so
TMP=`ls /tmp | grep install.dir.`
PATH_TO_PATCH=`cd /tmp/$TMP && pwd`
for f in `find $PATH_TO_PATCH -name "$LIB_TO_PATCH"`
do
echo "Patching library $f"
sudo sed -i 's/XINERAMA/FAKEEXTN/g' "$f"
done
2) Далее, запускаем инсталлятор.
3) Читаем его вывод в консоль. Ждём, когда распакуется jre.
А это тогда, когда появится надпись "Extracting the installation resources from the installer archive...".
Примерно так:
[ed@ed-desktop Maple11forLinux]$ ./Maple11Linux32Installer.bin Preparing to install... Extracting the JRE from the installer archive... Unpacking the JRE... ======> вот здесь вот распаковывается jre Extracting the installation resources from the installer archive... ===> а вот тут пора уже запускать скрипт Configuring the installer for this system's environment... Launching installer... ....
4) Собственно ждём появления инсталлятора и устанавливаем Maple куда хочется.
5) Меняем немного скрипт для того, чтобы пропатчить jre уже установленного Maple.
Выглядеть теперь он будет примерно так:
#!/bin/sh
echo "Patching";
LIB_TO_PATCH=libmawt.so
PATH_TO_PATCH=/path_to_maple_installation/maple11/jre.IBM_INTEL_LINUX
for f in `find $PATH_TO_PATCH -name "$LIB_TO_PATCH"`
do
echo "Patching library $f"
sudo sed -i 's/XINERAMA/FAKEEXTN/g' "$f"
done
6) А собственно всё. Пользуемся содержимым /path_to_maple_installation/maple11/bin :)
Вывод ошибки примерно следующий:
java: xcb_xlib.c:82: xcb_xlib_unlock: Assertion `c->xlib.lock' failed.
Aborted (core dumped)
Как подсказывает гугль - этот баг jre вполне известен и имеется патч для его решения.
И всё бы хорошо, если бы инсталлятор Maple использовал системную jre.
Увы, но это не так. Посему приходится идти на кое-какие ухищрения...
Инсталлятор Maple(в моём случае это был один файл - sh-скрипт) в процессе установки распаковывает своё содержимое(в том числе и jre) в директорию вида /tmp/install.dir.XXXXX.
Таким образом в промежуток времени между тем, как распакован jre и начинается запуск самого инсталлятора вполне есть возможность пропатчить нужные файлы.
Итак по пунктам:
1) Создаём скрипт вида:
#!/bin/sh
echo "Patching";
LIB_TO_PATCH=libmawt.so
TMP=`ls /tmp | grep install.dir.`
PATH_TO_PATCH=`cd /tmp/$TMP && pwd`
for f in `find $PATH_TO_PATCH -name "$LIB_TO_PATCH"`
do
echo "Patching library $f"
sudo sed -i 's/XINERAMA/FAKEEXTN/g' "$f"
done
2) Далее, запускаем инсталлятор.
3) Читаем его вывод в консоль. Ждём, когда распакуется jre.
А это тогда, когда появится надпись "Extracting the installation resources from the installer archive...".
Примерно так:
[ed@ed-desktop Maple11forLinux]$ ./Maple11Linux32Installer.bin Preparing to install... Extracting the JRE from the installer archive... Unpacking the JRE... ======> вот здесь вот распаковывается jre Extracting the installation resources from the installer archive... ===> а вот тут пора уже запускать скрипт Configuring the installer for this system's environment... Launching installer... ....
4) Собственно ждём появления инсталлятора и устанавливаем Maple куда хочется.
5) Меняем немного скрипт для того, чтобы пропатчить jre уже установленного Maple.
Выглядеть теперь он будет примерно так:
#!/bin/sh
echo "Patching";
LIB_TO_PATCH=libmawt.so
PATH_TO_PATCH=/path_to_maple_installation/maple11/jre.IBM_INTEL_LINUX
for f in `find $PATH_TO_PATCH -name "$LIB_TO_PATCH"`
do
echo "Patching library $f"
sudo sed -i 's/XINERAMA/FAKEEXTN/g' "$f"
done
6) А собственно всё. Пользуемся содержимым /path_to_maple_installation/maple11/bin :)