четверг, 11 декабря 2008 г.

Пересборка libwxgtk2.8 в Debian, без зависимостей от gconf и gstreamer

libwxgtk2.8-0 мне понадобился для amule. Оказалось он зависит от libgconf2-4. Хотя самого gconf он не требует, я всё же решил пересобрать. Убедится в том, что ни gconf, ни gstreamer этой версии wxgtk не требуются мне помог gentoo-portage.com.

wxGTK-2.8.8.1

dev-libs/expat

odbc?
( dev-db/unixODBC )

sdl?
( media-libs/libsdl )

X?
( >=x11-libs/gtk+-2.4 >=dev-libs/glib-2.4 media-libs/jpeg media-libs/tiff x11-libs/libSM x11-libs/libXinerama x11-libs/libXxf86vm gnome?
( gnome-base/libgnomeprintui )
gstreamer?
( >=media-libs/gstreamer-0.10 )
opengl?
( virtual/opengl )
)
Стабильная версия в Gentoo чуть свежее. Как видно gstreamer и libgnomeprintui - опциональны. Скачал wxGTK-2.8.8.1.ebuild на всякий случай.

Скачиваем wxwidgets2.8_2.8.7.1-1.1.dsc, wxwidgets2.8_2.8.7.1.orig.tar.gz, wxwidgets2.8_2.8.7.1-1.1.diff.gz и копируем их в папку wxwidgets2.8 в домашнем каталоге.

Нам понадобятся dpkg-dev и fakeroot.

1. Извлечём исходники с наложением патчей:
~/wxwidgets2.8$ dpkg-source -x wxwidgets2.8_2.8.7.1-1.1.dsc
2. Перейдём в каталог с распакованными исходниками (wxwidgets2.8-2.8.7.1). Чтобы избавиться от зависимостей нужно отредактировать опции сборки. Они находятся в файле rules в каталоге debian. Обнаружим:
# build options
COMMON_CONFIGURE_OPTIONS = \
--prefix=/usr \
--cache-file=$(config_cache) \
--with-flavour=$(DEBIAN_WXFLAVOUR) \
--with-zlib=sys \
--disable-reserved_virtual \

BASE_CONFIGURE_OPTIONS = $(COMMON_CONFIGURE_OPTIONS) \
--disable-gui \

GTK_CONFIGURE_OPTIONS = $(COMMON_CONFIGURE_OPTIONS) \
--with-gtk \
--enable-mediactrl \
--enable-sound \
--with-sdl \
--enable-display \
--enable-geometry \
--enable-graphics_ctx \
--with-libjpeg=sys \
--with-libpng=sys \
--with-libtiff=sys \
Опции сборки мы нашли, но что нужно убрать/добавить нам подскажет wxGTK-2.8.8.1.ebuild:
# wxGTK options
# --enable-graphics_ctx - needed for webkit, editra
# --without-gnomevfs - bug #203389

use X && \
myconf="${myconf}
--enable-graphics_ctx
--enable-gui
--with-libpng
--with-libxpm
--with-libjpeg
--with-libtiff
$(use_enable gstreamer mediactrl)
$(use_enable opengl)
$(use_with opengl)
$(use_with gnome gnomeprint)
--without-gnomevfs"
Итак нас интересуют опции mediactrl и gnomeprint. Из файла configure.in в каталоге исходников узнаём что mediactrl по умолчанию выключена, а gnomeprint включена, но игнорируется, если libgnomeprintui не найден. Следовательно нам нужно удалить --enable-mediactrl из файла rules.

3. Просмотрим файл control в каталоге debian на предмет определения зависимостей пакета libwxgtk2.8-0:
Package: libwxgtk2.8-0
Architecture: any
Section: libs
Depends: ${shlibs:Depends}
Suggests: libgnomeprintui2.2-0
В зависимостях указано ${shlibs:Depends}. Данная конструкция позволяет программе dh_gencontrol заполнить данное поле названиями пакетов разделяемых библиотек, которыми пользуется программа (Руководство начинающего разработчика Debian). Так и оставляем. Рекомендации Suggests: libgnomeprintui2.2-0 удаляем.

4. Устанавливаем пакеты, необходимые для сборки (Build-Depends), узнать их можно в файле wxwidgets2.8_2.8.7.1-1.1.dsc. Разумеется не все: debhelper, gettext, python-central, bc и dpatch у меня в системе есть (притянуты по зависимостям), а чтобы не устанавливать libgnomeprintui2.2-dev, libgconf2-dev, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev мы всё это и затеяли. Я выполнил:
# apt-get install flex bison libgtk2.0-dev python-all-dev python-all-dbg zlib1g-dev libjpeg62-dev libpng12-dev libtiff4-dev libsm-dev libgl1-mesa-dev libglu1-mesa-dev libesd0-dev
5. Всё готово, можно приступить к сборке. Переходим в каталог исходников и выполняем:
~/wxwidgets2.8/wxwidgets2.8-2.8.7.1$ fakeroot debian/rules build
6. Если сборка прошла успешно, создаём пакеты (как собрать и создать только libwxgtk2.8-0 я не знаю):
~/wxwidgets2.8/wxwidgets2.8-2.8.7.1$ fakeroot debian/rules binary
Пакеты будут созданы на каталог выше, т.е. в ~/wxwidgets2.8. Проверяем:
$ dpkg --info ~/wxwidgets2.8/libwxgtk2.8-0_2.8.7.1-1.1_i386.deb | grep Depends
Depends: libatk1.0-0 (>= 1.20.0), libc6 (>= 2.7-1), libexpat1 (>= 1.95.8), libgcc1 (>= 1:4.1.1), libgl1-mesa-glx | libgl1, libglib2.0-0 (>= 2.16.0), libglu1-mesa | libglu1, libgtk2.0-0 (>= 2.12.0), libjpeg62, libpango1.0-0 (>= 1.20.3), libpng12-0 (>= 1.2.13-4), libsm6, libstdc++6 (>= 4.1.1), libtiff4, libwxbase2.8-0 (>= 2.8.7.1), libxinerama1, zlib1g (>= 1:1.1.4)
Как видите ни gconf, ни gstreamer нет, можно устанавливать.

Пакет нужно заPin'нить, чтобы пересобранная локальная версия не была заменена на версию из репозитория при обновлении. Добавьте в /etc/apt/preferences следующие строки:
Package: libwxgtk2.8-0
Pin: origin Local
Pin-Priority: 1001
Конструктивная критика и дополнения приветствуются.

понедельник, 1 декабря 2008 г.

howto: Создание загрузочной USB-флэшки с SystemRescueCd

SystemRescueCd можно скачать по нижеприведённой ссылке.
http://sysresccd.org/Download

Описание его основных возможностей и преимуществ я дам позже.

Должен заметить, он содержит некоторые несвободные компоненты, к сожалению не имеющие на данный момент открытых аналогов.

Официальное howto показалось мне неполным, тем более что в результате на флэшке будет куча файлов, что мягко говоря не очень удобно. В случае использования этого howto на флэшке должны будут находится только папка syslinux и файл sysrcd.dat.

Вы можете использовать как USB-флэшку, так и USB-HDD (при этом разделов может быть несколько, но загрузчик должен быть на первом).

1. Нам понадобятся parted, dosfstools, mtools, syslinux и может пригодится gparted. Устанавливайте средствами вашего дистрибутива. Если у вас нет машины с Linux, можете загрузить SystemRescueCd, в нём есть всё необходимое.

2. Сохраните всю информацию с вашей флэшки.

3. Форматируем флэшку в FAT16 (можно с помощью gparted). Так как с других файловых систем будет загружаться далеко не на всех материнских платах и ноутбуках. Загрузка с USB-накопителей не стандартизирована и разные BIOS реализуют её по-своему.
# mkdosfs -F 16 /dev/sdb1
Естественно вместо sdb1 необходимо подставить ваш диск (gparted вам подскажет).
Символ "#" означает что эти действия должны выполняться с правами суперпользователя (root).

4. Проставляем boot флаг (можно с помощью gparted).
# parted /dev/sdb set 1 boot on
5. Монтируем образ SystemRescueCd (можно воспользоваться fuseiso, либо извлечь файлы из образа с помощью isomaster).
# mkdir /mnt/systemrescuecd
# mount -o loop systemrescuecd-x86-1.1.2.iso /mnt/systemrescuecd
6. Монтируем флэшку (можно средствами kde/gnome/xfce, например в /media/disk).

7. Создаём на флэшке папку syslinux.
$ mkdir /media/disk/syslinux
8. Копируем туда с SystemRescueCd файлы из папок isolinux, bootdisk и ntpasswd, а также syslinux.cfg из папки syslinux. И в корень флэшки файл sysrcd.dat.
$ cp -r /mnt/systemrescuecd/isolinux/* /media/disk/syslinux/
$ cp -r /mnt/systemrescuecd/bootdisk/* /media/disk/syslinux/
$ cp -r /mnt/systemrescuecd/ntpasswd/* /media/disk/syslinux/
$ cp /mnt/systemrescuecd/syslinux/syslinux.cfg /media/disk/syslinux/
$ cp /mnt/systemrescuecd/sysrcd.dat /media/disk/
9. Отмонтируем флэшку.
$ umount /dev/sdb1
10. Устанавливаем загрузчик syslinux в раздел на флэшке в папку syslinux.
$ syslinux -d syslinux /dev/sdb1
11. Прописываем в MBR флэшки загрузочную DOS/WIN MBR, которая передаёт управление загрузчику с раздела с boot флагом.
$ dd if=/usr/lib/syslinux/mbr.bin of=/dev/sdb
12. Можно проверять. В qemu можно проверить без перезагрузки.
$ qemu -hda /dev/sdb
В SystemRescueCd начиная с версии 1.1.0 "испортили" freedos.img, его лучше заменить на вот этот.
$ cp balder10.imz /media/disk/syslinux/freedos.img
Для того чтобы заставить некоторые BIOS загрузиться с USB-флэшки вам потребуется включить опцию "Legacy USB Support". Если BIOS поддерживает Boot menu (на материнских платах Asus клавиша "F8", на ноутбуках "F9" или "F10"), то удобнее всего воспользоваться им. Если же функция Boot menu отсутствует то ваша флэшка скорее всего появится в меню "Hard Disk Drives", реже в "Removable Devices" где вам необходимо будет выставить её приоритет.

Некоторые ноутбуки (замечательной фирмы Acer) всё же наотрез откажутся загружаться с USB-флэшки, и на некоторых (Fujitsu Siemens) не работает mhdd, - в этих случаях придётся загружать SystemRescueCd с диска.

Принимается конструктивная критика и дополнения.