четверг, 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 с диска.

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

пятница, 28 ноября 2008 г.

howto: Использование файловой системы ext2 в ОС Windows

На данный момент ОС семейства Windows официально поддерживают следующие файловые системы:

FAT32
  • Поддержка на чтение и запись почти всеми известными ОС, а также многими "железяками"
  • Файл не может иметь размер более 4 Гб
  • Необходимость дефрагментации
  • Нет (свободных/бесплатных) средств дефрагментации под GNU/Linux
NTFS
  • Поддерживает журналирование (только под Windows начиная с NT 4.0)
  • Нет (свободных/бесплатных) средств проверки (fsck) под GNU/Linux
  • Необходимость дефрагментации
  • Нет (свободных/бесплатных) средств дефрагментации под GNU/Linux
  • Спецификации NTFS закрыты, и свободные драйвера для других ОС не дают никаких гарантий. Microsoft может в последующих версиях Windows изменить NTFS так что свободные средства не будут нормально работать с разделами созданными в этих версиях Windows, при этом конвертация существующих разделов может осуществляться автоматически без предупреждений.
В сложившейся ситуации использовать файловые системы, предоставляемые Windows, неудобно. Тем более если GNU/Linux - ваша рабочая система, либо планируется плавный переход, то после полного отказа от Windows поддержка ваших NTFS разделов в рабочем состоянии может вызвать серьёзные затруднения. Благо существуют реализации драйверов свободных файловых систем для Windows.

Файловая система ext2 совершенствовалась вместе с Linux, и вы можете встретить в сети устаревшие данные о её параметрах.

ext2
  • Свободная файловая система
  • Не требует дефрагментации
  • Поддерживается на чтение и запись ОС GNU/Linux, FreeBSD, Mac OS X (проекты ext2fsx и ext2fuse), Windows (проекты Ext2IFS и ext2fsd)
  • Поддерживает журналирование (при добавлении журнала становится файловой системой ext3)
  • На данный момент нет средства для проверки на ошибки под Windows
Итак существует два (по крайней мере только два активных на данный момент) проекта реализации драйвера файловой системы ext2 под Windows:
  • Ext2IFS - http://www.fs-driver.org/ Распространяется по лицензии as-is, бесплатна для любого использования. Поддерживает Windows NT4.0/2000/XP/2003/Vista/2008. О ней и пойдёт речь.
  • ext2fsd - http://ext2fsd.sourceforge.net/ Свободный проект, распространяется под GPLv2. Не пользовался, поэтому ничего о стабильности работы и процессе настройки сказать не могу.
Форматировать раздел в ext2 нужно в GNU/Linux. Для этого нужно использовать команду:
# mkfs.ext2 -I 128 -m 0 /dev/sda1
Внимание все данные на разделе будут удалены!
sda1 необходимо заменить на ваш диск и раздел (проще всего узнать запустив gparted).
Символ "#" означает что эти действия должны выполняться с правами суперпользователя (root).
-I 128 необходимо для указания испозльзовать Inode size 128, т.к. с умолчальным на данный момент Inode size 256 Ext2IFS работать не будет.
-m 0 для того чтобы отказаться от резервирования 5% объёма раздела для суперпользователя.

Созданный раздел первоначально нужно смонтировать под линуксом и установить на него права доступа. Я использую ext2 на разделах с фильмами, музыкой и монтирую их в /mnt.
# mkdir /mnt/store1
# mount /dev/sda1 /mnt/store1
# chgrp users /mnt/store1
# chmod g+w /mnt/store1
Мы смонтировали раздел и открыли полный доступ к нему пользователям, входящим в группу users (ваш пользователь должен в неё входить). При создании файлов из под линукс их владельцем будет текущий пользователь. При использовании Ext2IFS под Windows - владелец root, группа users. Поэтому проблем с правами доступа не будет.

Теперь установим Ext2IFS под Windows. Опции проставленные в инсталляторе по умолчанию менять не нужно: разрешена поддержка UTF8 и файлов большого размера. Смонтировать разделы (т.е. назначить им буквы) под Windows нужно через апплет IFS Drives в панели управления.
Ни в коем случае не монтируйте корневой раздел линукс, вы можете нарушить права доступа. Если вы хотите получить доступ к своей домашней директории, то вы должны вынести её на отдельный раздел.

Ext2IFS можно установить везде где угодно, и воспользоваться вашим жёстким диском с ext2fs.

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

Курьёз с поддержкой оборудования в GNU/Linux и Windows, звуковая карта M-Audio Revolution 5.1

Не так давно купил звуковую карту M-Audio Revolution 5.1. Эта мультимедийная карта, при своей низкой цене обладает качественным ЦАП AKM 4358 (такой же ЦАП стоит в профессиональных картах ESI Juli@ и M-Audio Audiophile192), и на мой взгляд является (в паре с достойной акустикой разумеется) лучшим выбором для любителя послушать музыку. Но речь не об этом.

Пришёл домой, вытащил пожилой Creative SB Live! 5.1. Использую Debian GNU/Linux lenny. Ядро тогда было 2.6.25. Воткнул новую звуковуху. Включаю комп, запускаю QMPDClient, звук есть только из правой колонки, что и указано здесь "The left stereo channel is always muted on boot.". Лечится изменением громкости (в любом микшере).
К этому времени ядро 2.6.26 как раз появилось в lenny, обновился. Перезагружаюсь, включаю музыку и всё отлично - играют обе колонки.

Дошли руки до установки драйвера в Windows XP SP2, заметьте - установки, в Debian ничего устанавливать не пришлось. Скачал последнюю версию драйвера, на тот момент 5.10, с поддержкой Windows XP SP3. Устанавливаю, перезагружаюсь, запускаю foobar2000 и что я слышу - играет только правая колонка! Лечится также подёргиванием ползунка изменения громкости, при том, только в фирменном микшере, изменение громкости в панели управления звуком никакого эффекта не производит.

И после этого жалуются на поддержку оборудования в Linux, в то время как у создателей этого оборудования руки растут неизвестно откуда.

Что ж M-Audio всегда славилась кривизной своих драйверов. Удалил драйвер, поставил с диска версию 1.0, и всё стало нормально (как в Linux).