Open Way | Systems | Distro | Shell | Desktop | Applications
Network | Development | Download | OfftopicКарта сайта
FreeNotesФорум POSIX.ru
На главную страницу

Принцесса Джульетта и FreeBSD

Артем Носов aka ChiP
2004

О чем собственно речь...

А речь пойдет, хоть и кратко, о поддержке Joliet extension для iso9660 в FreeBSD. О самом стандарте мне известно немного, попытки найти более весомую информацию ни к чему не привели. Однако, достоверно известно, что стандарт был "разработан" Microsoft'ом для расширения возможностей существовавшего тогда и имевшего кучу ограничений iso9660. Сейчас последний в свой чистой ипостасии почти не используется. Практическое применение нашли как раз его производные: Rock Ridge ("стандарт" для *nix систем), Apple Extensions, etc.

Собственно, не в стандартах дело, а в граблях...на которые приходится наступать пользователям *nix подобных систем при работе с ними. И, конечно, самой большой шишкой в этом плане выступает поддержка русского языка. О ней и пойдет речь под призмой FreeBSD и Joliet стандарта или, говоря иначе, как увидеть кирилические буковки, а не знаки вопроса, на компакте, полученном от друзей, использующих Windows ;)

Решение для FreeBSD-4.x

Стандартным решением для FreeBSD 4-ой ветки является установка модулей для ядра, осуществляющих автомаческое переконвертирование в необходимую кодировку:

$ cd /usr/ports/sysutils/cd9660_unicode &&
$ make install clean

В дальнейшем они становятся доступными по адресу /usr/local/lib/cd9660_unicode/. Так, например, для локали ru_RU.KOI8-R достаточно подгрузить модуль cd9660_koi8-r.ko:

$ kldload /usr/local/lib/cd9660_unicode/cd9660_koi8-r.ko

После этого русские символы "появляются", даже уже на примонтированном cdrom устройстве. Соотвественно для автоматической загрузки модуля достаточно создать ссылку на него в /modules

$ ln -sf /usr/local/lib/cd9660_unicode/cd9660_koi8-r.ko \
/modules/cd9660_koi8-r.ko

и прописать соотвествующую строчку в /boot/loader.conf:

cd9660_koi8-r_load="YES"

Это решение осталось справедливым и для 5-ой ветки. Однако, с выходом 5.2-RELEASE появилась новая возможность.

CD9660_ICONV

Для того, чтобы ей воспользоваться вам понадобится как минимум наличие исходных текстов ядра системы. Хотя я бы посоветовал иметь при себе все дерево (именно этот случай я рассмотрю). Сама процедура проста и "условно" ее можно разделить на 2-а шага: добавление опций LIBICONV и CD9660_ICONV в конфиг ядра и его (ядра) пересборка:

$ cd /sys/i386/conf &&
$ cp GENERIC MYKERNEL &&
$ vi MYKERNEL
# -- добавив опции -- #
options         LIBICONV
options         CD9660_ICONV
# -- выходим, набрав :wq -- #

И непосредственно пересборка:

$ cd /usr/src &&
$ make buildkernel KERNCONF="MYKERNEL" &&
$ make installkernel KERNCONF="MYKERNEL"

После пересборки необходимо перезагрузить машину, т.к. способа вытеснения уже загруженного ядра новым для x86 еще не придумали :).

Теперь примонтируем компакт диск, на котором до этого были "кракозяблики" (знаки вопроса в моем случае ;-):

$ mount_cd9660 -C KOI8-R /dev/acd0 /cdrom

Думаю, это не совсем справедливо для нашего случая, однако может натолкнуть на некоторые варианты решений в случае затруднения: список "всех" поддерживаемых encodings можно глянуть выполнив:

$ iconv -l

Завершающим этапом станет добавление (или изменение существующей) строчки в /etc/fstab. Например, для устройства /dev/acd0 и точки монтирования /cdrom строчка будет выглядеть:

/dev/acd0	/cdrom	cd9660	ro,noauto,-CKOI8-R	0 0

Для тех, кто еще не в курсе: cdrom не будет монтироваться автоматически при перезапуске системы (о чем говорит нам опция noauto). Однако, вместо "длиннющей" команды теперь нам достаточно набрать:

$ mount /cdrom

У меня все. Остальное вам на домашнее задание;-)

Дополнительная информация:
man mount_cd9660
man mount
Release Notes для FreeBSD-5.2
handbook


Контроль бизнеса его Владельцем: курсы по продажам. . оборудование компьютерной диагностики автомобилей . производство бейджиков цена