FreeBook
FreeBSD
OtherBSD
SB Linux
OtherOS
FreeProgs
FreeNotes
FreeGeo
SiteMap

FreeBSD. Mini-HOWTO
[Top]
[Content]

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

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

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

А речь пойдет, хоть и кратко, о поддержке 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 и прописать соотвествующую строчку в /boot/loader.conf:

  ln -sf /usr/local/lib/cd9660_unicode/cd9660_koi8-r.ko /modules/cd9660_koi8-r.ko
  vi /boot/loader.conf
  # -- добавив строчку -- #
  cd9660_koi8-r_load="YES"
  # -- выходим, набрав :wq -- #

Это решение осталось справедливым и для 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

[Content]
[Top]