Администрирование
Русификация FreeBSD
Написал Алхимик   
Среда, 20 Июль 2005

Многие после знакомства с FreeBSD говорят, что процедура русификации очень проста. Значительно проще русификации других популярных клонов UNIX, например Solaris или Linux.

Русификация FreeBSD состоит из двух независимых частей: русификации консоли и русификации среды X-windows.

Как уже говорилось в статье по установке FreeBSD русифицировать консоль можно из программы sysinstall. Для этого необходимо выбрать шрифт IBM866 в пункте Consol, карту соответствия KOI8-R to IBM866 в Keyamap и открыв редактором ee файл /etc/ttys выбрав пункт TTYs исправить в нем все cons25 на cons25r.

Однако все это можно сделать и после установки. Для этого придется подредактировать файлы /etc/rc.conf, /etc/ttys и /etc/profile (последний - для русификации LOCALE).

Приступим.

Вот что необходимо дописать в указанные файлы:

/etc/rc.conf

keymap=ru.koi8-r
keychange=”61 ^[[K”
scrnmap=koi8-r2cp866
font8x16=cp866b-8x16
font8x14=cp866-8x14
font8x8=cp866-8x8

/etc/ttys
Меняем все значения cons25 на cons25r.

/etc/profile

LANG=ru.KOI8-R
export LANG
MM_CHARSET=KOI8-R
export MM_CHARSET

Вот и все. Консоль русифицирована.

Сейчас я покажу, что русифицировать X-windows не сложнее.

Для начала необходимо установить кириллические шрифты для X. Сделать это можно как из пакетов, так и из портов.

Из портов:

cd /usr/ports/russian/X.language/
make install clean

Далее дописываем в файл /etc/XF86Config (Внимание! Во FreeBSD строчные и прописные буквы имеют разное значение! Так, например, конфигурационный файл XF86Config отличается от исполняемого файла настройки X-Windows xf86config):

FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/”
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/misc”
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/75dpi”
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/100dpi”
FontPath “/usr/X11R6/lib/X11/fonts/cyrillic/100dpi”

А в секции. Keyboard

XkbRules”xfree86”
XkbModel”pc101”
XkbLayout”ru”
XkbOptions”ctrl:nocaps,grp:ctrl_shift_toggle”

Внимание! для версий больше 4.3 в XkbLayout языки нужно указывать через запятую! например us,ru

Теперь переключение между раскладками будет осуществляться Сtrl+Shift.
Некоторые Window-менеджеры позволяют русифицировать систему методом MS Windows, т.е. выбирая нужные пункты в меню и кликая по чек-боксам. Минусы этого метода – данная настройка не всегда бывает корректной, она возможна лишь в некоторых менеджерах (например, KDE).

(0 Комментарии)

 
Установка FreeBSD (Midnight Commander),PROXY(FireWall,Squid,SquidGuard),WEB (Apache, MySQL, PHP)
Написал Алхимик   
Среда, 20 Июль 2005
(0 Комментарии)
 
Syscons по русски (Консоль Unix на русском)
Написал Алхимик   
Среда, 20 Июль 2005

Возможность простой и корректной работы с языками, отличными от американского английского (конкретно, в наших условиях, русским) - одно из необходимых условий настольного использования любой операционной системы. И большинство распространенных юзерофильных дистрибутивов Linux давно уже, вне зависимости от ПМЖ разработчиков, заговорили по-русски "из коробки".

Однако мир свободных ОС не замкнулся на Linux'е - существует еще и их BSD-семейство. И пользователь вправе задаться вопросом - а как в нем обстоит дело с русификацией?

На это я вынужден ответить честно и откровенно: по разному. Так, в NetBSD и OpenBSD до недавнего времени с русификацией возникали определенные проблемы (хотя нынче они постепенно уходят в прошлое). А вот FreeBSD в этом отношении выглядят ничуть не хуже, чем любые дистрибутивы Linux, даже отечественного производства. Ибо в ней можно выполнить полную русификацию уже на стадии начальной установки, не покидая программы sysinstall (посредством которой русификация может быть произведена и в любой другой момент времени).

Речь пойдет только о русификации текстового режима, то есть драйвера syscons, - русификация Иксов есть предмет отдельного разговора, с FreeBSD прямо не связанного.

Базовая русификация средствами sysinstall

Для русификации FreeBSD 5-й ветки достаточно при установке (или позднее - запустив sysinstall из командной строки) зайти в меню Configuration и выбрать там пункт Console. В нас заинтересуют следующие подпункты:

  • Font;
  • Keymap;
  • Screenmap;
  • Ttys.

В пункте Font выбирается шрифт для экранного вывода. Для нас интерес пресдтавляют следующие варианты - шрифты IBM 866 или (для обитателей моей исторической родины) IBM 866u, обеспечивающие вывод в кодировке DOS, а также (для бывших "подоконников") IBM 1251, позволяющий вывод в кодировке Windows (должен только предупредить, что нет ничего более уродливого, чем вид консольных программ, использующих псевдографику, типа Midnight Commander, при использовании экранного вывода в Windows-кодировке). Вывод в кодировке KOI8 также возможен, но потребует некоторых дополнительных действий руками, о которых будет сказано ниже.

Традиционным для FreeBSD (впрочем, как и для Linux) является экранный вывод в DOS-кодировке, на причинах чего задерживаться я не буду. Так что на нем для начала и остановимся. А вот раскладку клавиатуры, выбираемую в подпункте Keymap, мы установим для кодировки KOI8-R; впрочем, другой в sysinstall не предусмотрено. Что, однако, не запрещает использовать для ввода и DOS- или Windows-кодировку - соответствующие раскладки в комплекте имеются, только устанавливать их придется вручную.

На резонный вопрос о различии кодировок ввода и вывода мы ответим подпунктом Screenmap, в котором устанавливаются карты соответствия между оными. В нашем случае таковой будут KOI8-R to IBM866 или (для граждан незалежной Украины) KOI8-U to IBM866u. Очевидно, что при использовании DOS-кодировки и для ввода, и для вывода необходимости в карте соответствия нет, а при Windows-выводе карту соответствия придется руками не только установить, но и предварительно изготовить (или скачать - откуда, честно говоря, не запомнил за ненадобностью).

Наконец, остается последнее действие - изменение типа терминала, без чего экранный вывод, особенно псевдографики, будет выглядеть, скажем так, несколько странно. Это осуществляется в подпункте Ttys. Здесь следует выбрать KOI8-R (терминал cons25r) для России или KOI8-U (терминал cons25u) для Украины. И на этом успокоится - по завершении установки (или реконфигурирования) системы и перезагрузке мешины мы будем иметь базовые средства для работы с кириллицей.

Результат стандартной русификации

Метод русификации через sysinstall прост, но имеет некоторые ограничения. Во-первых, устанавливаемая при этом кириллическая раскладка клавиатуры весьма необычна, соответствуя примерно DOS-маркировке клавиш, но со знаками препинания на нижнем регистре, а цифрами - на верхнем. Само по себе это удобно (точки и запятые приходится вводить чаще, чем цифирь, для которой еще и KeyPad имеется), однако для большинства пользователей непривычно. Во-вторых, умолчальный экранный шрифт далек от эстетического совершенства, особенно в кириллической части. В третьих, практически единственные возможные при этом кодировки - KOI8-R для ввода и DOS - для вывода. И, наконец, в четвертых, устанавливаемый через sysinstall тип терминала предназначен только для стандартного экранного разрешения (вернее, плотности символов) - 25 строк на 80 колонок.

Так что вполне возможно, что появится желание изменить некторые (или все) из установленных параметров. Чтобы понять, как это сделать, посмотрим, как наши интерактивные действия отразились в конфигурационных файлах FreeBSD. А отразились они в файлах /etc/rc.conf и /etc/ttys. В первом посредством sysinstall были добавлены строки

font8x14="cp866-8x14"
font8x16="cp866b-8x16"
font8x8="cp866-8x8"

отвечающие за загрузку шрифтов для разных экранных разрешений (вернее, разного количества строк), строка

keymap="ru.koi8-r.kbd"

загружающая кириллическую раскладку клавиатуры, и строка

scrnmap="koi8-r2cp866"

обеспечивающая перекодировку KOI8-ввода в DOS-вывод (в предположении, что все делалось в соответствие с традициями и рекомендациями).

Что дают эти строки? Для понимания этого нужно сделать несколько дополнительных замечаний. Как известно, во управление экраном и клавиатуров во FreeBSD... Вернее, в syscons - драйвере системной консоли, используемой в этой ОС по умолчанию; возможно также использование в этом качестве драйвера pcvt (весьма скверно русифицируемого, однако единственно работающего, как говорят, на некоторых старых ноутбуках).

...Так вот, для управления экраном (в том числе шрифтами) и клавиатурой (в том числе раскладками) в syscons используется две программы - vidcontrol и kbdcontrol, соответственно. Первая, как нетрудно догадаться, отвечает за экран, в том числе с помощью опции -f font_name позволяет подгружать шрифты вывода, вторая - за клавиатуру, с помощью опции -l keymap_name позволяя загружать клавиатурные раскладки. Кроме того, команда vidcontrol c опцией -l screenmap_name обеспечивает, при необходимости, загрузку карты соответствия между кодировками ввода и вывода.

Команды vidcontrol и kbdcontrol для загрузки шрифта, раскладки и клавиатуры отрабатываются при старте системы (в сценарии /etc/rc.d/syscons). И параметры свои они получают при этом именно из значений соответствующих строк главного конфигурационного файла - /etc/rc.conf. Благодаря чему и осуществляется кириллизация системы при ее загрузке.

В файле /etc/ttys значения типа терминала изменились с умолчального cons25 на выбранный cons25r для всех виртуальных консолей (их всего по умолчанию 8).

Очевидно, что для изменения шрифта, раскладки, карты соответствия и типа терминала достаточно изменить соответствующие значения в перечисленных файлах. Нужно только знать, какие из этих значений допустимы.

Что и как менять

Начнем с типа терминала. Все возможные их варианты описаны в файле /etc/termcap (вернее, /usr/share/misc/termcap, на который он ссылается). Для русифицированного в кодировке KOI8 терминала можно увидеть несколько значений - от стандартного cons25r до максимально плотного cons60r (очевидно, что число соответствует плотности строк). То есть при использовании нестандартных экранных разрешений нужно заменить в /etc/ttys умолчальные значения типа терминала на те, которые соответствуют установленному числу строк. При использовании иных кодировок или разрешений, возможно, придется внести описания соответсвтующих им типов терминалов вручную. Хотя это и не приветствуется - судя по тому, что файл /usr/share/misc/termcap по умолчанию закрыт для изменений даже суперпользователю.

Теперь - возможные раскладки клавиатуры. Файлы описания оных находятся в каталоге /usr/share/syscons/keymaps и кириллическая его часть выглядит следующим образом:

ru.cp866.kbd
ru.iso5.kbd
ru.koi8-r.kbd
ru.koi8-r.shift.kbd

Практически, однако, кроме умолчальной раскладки ru.koi8-r.kbd, интерес представляет только последний файл - это обычная раскладка для старых клавиатур с DOS-маркировкой. Однако в продаже нынче таких уже не найти. И потому хорошо бы иметь раскладку в кодировке KOI8 для Windows-маркированных клавиатур, использующую и дополнительные Win-клавиши. Изготовить таковую самостоятельно - большого труда не составит - формат файлов клавиатурных раскладок предельно прозрачен. Однако если это лениво - такая работа уже проделана, о чем я скажу ниже.

Обращаемся к шрифтам. Их, содержащих символы кириллицы, немало в каталоге /usr/src/share/syscons/fonts:

cp1251-8x14.fnt
cp1251-8x16.fnt
cp1251-8x8.fnt

для Windows-кодировки,

cp866-8x14.fnt
cp866-8x16.fnt
cp866-8x8.fnt
cp866b-8x16.fnt
cp866c-8x16.fnt
cp866u-8x14.fnt
cp866u-8x16.fnt
cp866u-8x8.fnt

для кодировки DOS,

koi8-r-8x14.fnt
koi8-r-8x16.fnt
koi8-r-8x8.fnt
koi8-rb-8x16.fnt
koi8-rc-8x16.fnt
koi8-u-8x14.fnt
koi8-u-8x16.fnt
koi8-u-8x8.fnt

для кодировки KOI8. Есть даже шрифты для ISO 8859-5:

iso05-8x14.fnt
iso05-8x16.fnt
iso05-8x8.fnt

Опять же, практически интересными выглядят только шрифты для CP866 и KOI8. И тут пользователя постигает изрядное разочарование: ни одно из предложенных в комплекте начертаний нельзя, мягко говоря, назвать шедевром фонт-дизайнерской мысли. Возникает резонный вопрос - можно ли пополнить коллекцию, и если да - то как?

Пополнение коллекции шрифтов

В любой дистрибутив Linux отечественного (а в последнее время - и не только отечественного) производства входит достаточно большой набор кириллических шрифтов для консоли, среди которых есть очень даже приятные для глаз - UniCyr-lenta и UniCyr-sans, а также разнообразные стилизации с элементами декоративности - alt-antiq, alt-asian, alt-t. Однако напрямую прикрутить их к консоли FreeBSD не удастся - все они в psf-формате,содержащем всякого рода дополнительную информацию (заголовки и т.н. psf-сигнатуры), тогда как во FreeBSD используются либо шрифты в raw-формате, не содержащие ничего, кроме собственно бинарных данных о шрифте. Точнее, собственно Free'шные шрифты имеют еще и некое минимальное обрамление - его можно видеть, дав команду

$ ls path_to/font_name

Однако чистые raw-шрифты также можно спокойно использовать. И получить их из шрифтов psf достаточно просто: достаточно отсечь от последних заголовочную часть (размером 4 байта) и сигнатуру, вычленив таким образом собственно бинарное описание. Размер последнего составляет 4096, 3584 или 2048 байт (для шрифтов с матрицами 8x16, 8x14 и 8x8, соответственно). Проделать такую процедуру можно командой dd с соответствующими параметрами. Для шрифта с матрицей 8x16, скажем, того же UniCyr-sans, она будет выглядеть следующим образом:

$ dd if=UniCyr-sans-8x16.psf \
	of=UniCyr-sans-8x16.fnt \
	bs=1 skip=4 count=4096

Если Linux-шрифт, как это обычно бывает в дистрибутивах, предствален в gzip-сжатом виде, его предварительно нужно распаковать.

Таким образом мы получем достаточное количество шрифтов хорошего качества. Единственное для них ограничение - они не могут быть вкомпилированы в ядро FreeBSD, на это способны только шрифты в ее собственном формате.

Однако это еще не все - существует пакет terminus-fonts, включающий в себя консольные и терминальные (для X-терминалов) шрифты на все случаи жизни, а также инструменты для их генерации. Он столь замечателен, что заслуживает подробного рассмотрения.

Шрифтовой терминатор

Пакет terminus-fonts - болгарского происхождения и имеется он и портах FreeBSD (x11-fonts/terminus-font), а также доступен для нее в качестве бинарного пакета. Хотя я лично предпочел бы устанавливать его вручную, как описано ниже - и порт, и пакет содержат только терминальную (для X-терминалов) часть оригинального набора.

Как уже было отмечено, terminus-fonts - не просто шрифтовой набор, а универсальный инструмент для генерации терминальных шрифтов любого назначения. Он включает в себя

  • шрифтовые файлы базовой гарнитуры в формате BDF (Bitmap Distribution Format) нормального и полужирного начертания, высотой от 14 до 24 пикселей, в кодировке Unicode;
  • набор скриптов для преобразования их в шрифтовые файлы различных используемых Unix-консолями и X-терминалами форматов;
  • make-файлы для соответствующих преобразований;
  • необходимые дополнительные данные, в частности, unimap-таблицы для преобразования 8-битных кодировок в Unicode;
  • файлы README-документации на английском и болгарском языках.

В README-файлах дается исчерпывающее описание того, как обращаться с пакетов. И потому я лишь кратко опишу доступные возможности. Итак, базовые bdf-шрифты могут быть преобразованы в шрифтовые файлы следующих форматов:

  • raw-формат, в котором шрифтовой файл содержит только бинарные данные; этот формат используется для вывода в консольных драйверах BSD-семейства (syscons FreeBSD, pcvt и wscons);
  • psf-формат, включающий, кроме собственно шрифтовых данных, заголовок и psf-сигнатуру с дополнительной информацией о шрифте; это - основной формат вывода в Linux-консоли;
  • pcf-формат для вывода на X-терминалах.

Генерация шрифтовых файлов осуществляется командой make с указанием соответствующей цели. Например, для получения интересующих нас в данный момент шрифтов для системной консоли FreeBSD (raw-файлов) она будет выглядеть так:

$ make raw

А шрифты для Linux-консоли и X-терминала получаются соответственно командами:

$ make psf

и

$ make pcf

Качество всех консольных шрифтов исключительно высокое. При этом их внешний вид и читабельность не ухудшаются при нестандартной плотности знаков. Правда, их вариации для X-терминалов именно в терминале выглядят достаточно непривычно. Однако для текстового режима - пожалуй, ничего лучше не придумаешь. Короче говоря, очень рекомендую...

В любом случае каждое шрифтоначертание автоматически генерируется в нескольких кодировках: ISO8859-1/2/5/9/15/16, Windows-1250/1251/1252/1254, IBM-437/852/855/866, KOI8-R/U/E/F, Bulgarian-MIK, Paratype-PT154/PT254 и Macintosh-Ukrainian.

Интересно, что для BSD-консоли шрифты с традиционной для нее кодировкой вывода CP866 сами собой не образуются. Однако их при можно изготовить из шрифтов Linux-консоли способом, аналогичным описанному в предыдущем разделе. Или - просто отказаться от ее использования, ограничившись выводом в KOI8. Ведь одна из причин применения DOS-кодировки на выводе - низкое качество KOI-шрифтов, - теперь отпадает, а с разрывами в рамках псевдографических программ я, например, вполне готов примириться... Правда, это требует еще некоторых действий (см. ниже).

Что использовать для вывода

Остается разобраться с картами соответствия - на что их стоит менять, и стоит ли вообще. При использовании для экранного вывода кодировки DOS ничего с ними делать не нужно, оставив соответствующую строку из /etc/rc.conf в неприкосновенности. Тем более, что никаких других карт соответствия в комплекте FreeBSD и нету. И, очевидно, что если вывод, как и ввод, осуществляется в кодировке KOI8, необходимость в карте соответствия вообще отпадает, так что строку

scrnmap="koi8-r2cp866"

нужно закомментировать или просто удалить.

Однако использование экранной кодировки KOI8, помимо некоторого искажения символов псевдографики, влечет за собой более неприятный эффект. Ибо коды символов, которыми представляется т.н. графический (точнее, конечно же, псевдографический) курсор консольной мыши, совпадают с KOI-кодами русских букв п, я, р, с. В результате чего при перемещении мыши буквы эти исчезают с экрана (хорошо еще, что не из файла:-)). Избежать этого можно, переопределив "мышиные" коды - одним из двух способов. Первый - включить в файл /etc/rc.conf строку

mousechar_start="3"

Второй - пересобрать ядро с опцией

options    SC_MOUSE_CHAR=0x3

Поскольку ядро все равно пересобирать - второй способ кажется предпочтительней. В любом случае после этого курсор мыши в сочетании с KOI8 не доставит никаких неприятностей.

Русификация на уровне ядра

Раз уж речь зашла о ядре, поговорим о принципиально ином способе русификации FreeBSD. Он предполагает, что раскладка клавиатуры и экранный шрифт с поддержкой кириллицы не подгружаются при страте системы с помощью соотвествующих опций командами vidcontrol и kbdcontrol, а встраиваются непосредственно в ядро взамен умолчальных англо-американских. Первое достигается включением в файл конфигурации ядра (/usr/src/sys/i386/conf/MYKERNEL) двух строк:

options         ATKBD_DFLT_KEYMAP

разрешающей встраивание клавиатурной раскладки, отличной от умолчальной, и

makeoptions     ATKBD_DFLT_KEYMAP=имя_раскладки

собственно и указывающей, какую раскладку следует встроить (например, ru.koi8-r.shift). Аналогично для встаривания экранного шрифта требуются строки

options         SC_DFLT_FONT

разрешающая переопределение шрифта, поддерживаемого по умолчанию, и

makeoptions     SC_DFLT_FONT=codepage

указывающая на требуемую кодировку (например, koi8-r). Правда, в файле /usr/src/sys/conf/NOTES, описывающем все возможные опции конфигурирования ядра, я не нашел никаких указаний на возможность встраивания в ядро карты соответствия. Так что ее все равно придется грузить через /etc/rc.conf (или - использовать одну и ту же кодировку и для ввода, и для вывода).

В чем смысл встраивания кириллической раскладки и шрифтов в ядро? Чтобы иметь возможность работать с символами родной речи в аварийных ситуациях, когда не происходит отработки обычных стартовых сценариев - например, при загрузке в однопользовательском режиме. При этом, если возможность читать русскую документацию в такой обстановке видится весьма ценной, то необходимости в кириллической раскладке я как-будто не вижу.

Локализация

Последнее действие, требующееся для корректной работы с русским языком - это определение locale, т.н. локализация. Во FreeBSD она может быть выполнена двояко. Первый способ - стандартный для всех POSIX-систем, через определение локально-зависимых переменных в профильном файле пользовательской оболочки (login shell). Он многократно описан, и задерживаться на нем я не буду.

Второй способ - специфичен, насколько я знаю, именно для FreeBSD. Дело в том, что в этой ОС учетная запись пользователя имеет, кроме обычных полей (имя, шелл и т.д.), еще и атрибут class. Он позволяет задать переменные окружения (в том числе и локально-зависимые) для данного пользователя глобально, вне зависимости от его пользовательской оболочки.

Все предопределенные классы пользователей описываются в файле /etc/login.conf. Просмотр его показывает, что среди них существует и класс russian. От "умолчального" (default) класса он отличается только значениями локально-зависимых переменных:

#
# Russian Users Accounts. Setup proper environment variables.
#
russian|Russian Users Accounts:\
	:charset=KOI8-R:\
	:lang=ru_RU.KOI8-R:\
	:tc=default:

Прошу обратить внимание на строку :tc=default: - именно она и свидетельствует, что все остальные параметры берутся из описания класса default, скоро нам это может понадобиться.

Так что если локаль KOI8-R нас устраивает, все, что требуется - это приписать нужного пользователя к классу russian. Как? Опять же, возможны вариант. Например, при создании нового пользовательского аккаунта посредством утилиты adduser (а это - самый простой способ создать одного-двух пользователей домашнего десктопа: себя, любимого - для нормальной работы, и себя, любимого не менее, - для всякого рода нездоровых экспериментов) вопрос о классе пользователя будет задан явно.

Класс пользователя можно переопределить и позднее - любой соответствующей утилитой. Благо во FreeBSD есть могучая команда pw, - универсальный инструмент для управления учетными записями вообще. При ее посредстве это делается так:

$ pw usermod юзер_имя_рек -L russian

Если же KOI'шная локаль почему-либо не устраивает - придется создавать свой собственный класс пользователей. Хотя делается это просто - в файл /etc/login.conf вносится строка с именем класса и его описанием, затем даются нужные значения переменных charset и lang. Например, если требуется общение с "подоконниками", им можно присвоить значения

ruswin|Russian Win Accounts:\
	:charset=CP1251:\
	:lang=ru_RU.CP1251:\

не забыв добавить ту самую строку :tc=default:. К слову сказать, в текущей версии FreeBSD имеется полный набор русских локалей:

$ locale -a | grep ru                                      18:03 ttyp2
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R

Можно видеть, что в приведенном списке локаль UFT-8 не наблюдается. И действительно, в штатном комплекте FreeBSD ее нет. Однако при желании несколько приблизиться к светлому будущему (недостижимому, как коммунизм в одной отдельно взятой стране) - ее можно установить из портов (/usr/ports/misc/utf8locale), после чего в выводе команды locale -a добавится строка ru_RU.UTF-8.

(0 Комментарии)
 
Замена MAC-адреса: зачем и как?
Написал Алхимик   
Среда, 20 Июль 2005

В большинстве домашних и городских сетей используется доступ через DHCP, с привязкой внутреннего IP-адреса к MAC-адресу сетевой карты. Что само по себе не хорошо и не плохо - ибо в большинстве случаев пользователя никак не касается: при смене машины (и сетевой карты) достаточно позвонить провайдеру для перепривязки. Тем не менее, можно представить себе минимум две ситуации, когда смена MAC-адреса пользователем становится необходимостью - без всякого злого умысла.

  1. потребность выходить в сеть попеременно с двух машин, при отсуствии возможности (или желания) налаживать сеть внутреннюю;
  2. наличие двух операционок и двух сетевых карт, каждая из которых поддерживается только одной операционкой.

Не так невероятно, как кажется. Первая причина может быть обусловлена еще и тем, что провайдеры, предоставляющие безлимитный доступ, без восторга относятся к тому, что пользователь качает сразу с двух машин - хотя как это может повредить при соответствующим образом обрезанной скорости (а дешевые безлимитные тарифы всегда обрезаны), я не очень представляю.

А во второй ситуации я оказался недавно при покупке новой машины: встроенная сетевая от чипсета nForce250 (не Ultra) прекрасно поддерживалась Linux'ом (при должным образом собранном ядре), но категорически не виделась ни во FreeBSD, ни в DragonFly. С извлеченной же из загашников NE2000-совместимой карточкой неизвестного (подозреваю, очень китайского) генезиса ситуация была почти обратная: она нормально опознавалась в DragonFly, но в Linux'е... не то чтобы совсем не работала, но время от времени куда-то девалась, так что и назвать это работой язык тоже не поворачивался.

Конечно, все эти проблемы были решаемы (и в конечном счете решены), но в тот момент мне требовался доступ в Интернет - и немедленно (дело происходило в выходные дни, что усложняло ситауцию). И я вспомнил о возможности подмены MAC-адреса, предоставляемой волшебной палочкой сетевика-POSIX'ивиста - утилитой ifconfig.

Начнем с Linux'а - проверялось на дистрибутивах CRUX и Archlinux, при как бы настроенной сети. Как бы - потому что все, касающееся старта DHCP, было прописано в конфигах должным образом. Но поскольку MAC-адресы карты не совпадал с зафиксированным у провайдера, старт этот при загрузке системы завершался ошибкой. В чем легко было убедиться, запустив ifconfig без параметров.

Оказалось, что во исправление положения всего то требовалась простая команда (опчерпнуто из man ifcongif):

$ ifcongif eth0 hw ether 00:00:00:00:00:00

где eth0 - имя сетевого интерфейса, hw (от hardware) - опция, предписывающая сменить "железный" идентификатор карты, ether - указание на класс сетевых устройств, а нули заменяются реальным MAC-адресом. После чего оставалось только перезапустить dhcp-демона. Как - зависит от дистрибутива. В Archlinux (как и в CRUX) подходящим способом оказался такой:

$ /etc/rc.d/networks restart

А для того, чтобы не проделывать все эту процедуру после каждой перезагрузки, достаточно прописать приведенную выше команду ifconfig с соответствующими параметрами в какой-либо из подходящих стартовых скриптов, отрабатываемых до запуска dhcp-демона. В моем случае подходящим оказался тот же /etc/rc.d/networks, отвечающий в Archlinux (и в CRUX) за поднятие сети вообще.

В BSD-системах - все чуть-чуть иначе: различия связаны и с именами сетевых интерфейсов, и с форматом команды ifconfig, и с особенностями скриптов инициализации. Для начала - там не стандартного имени интерфейса, eth#, а есть множество интерфейсных устройств, имена которых более-менее коррелируют с используемым в сетевой карте чипом. В моем случае (как я уже говорил, для BSD использовалась карта из семейства NE2000), имя ему было - ed0. Далее, опции hw в BSD'шном варианте ifconfig нет - достаточно указать класс устройств и собственно адрес. В результате команда приобретает такую форму:

$ ifconfig ed0 ether 00:00:00:00:00:00

После чего опять же перезапуск dhcp-службы. Что делается так:

$ /etc/rc.d/dhclient restart

Ну и увековечить переопределение MAC-адреса можно в том же файле - дописав в самое его начало приведенную выше строку с командой ifconfig.

(0 Комментарии)

 
Запуск windows-приложений под FreeBSD
Написал Алхимик   
Среда, 20 Июль 2005

Одним из многих достоинств FreeBSD, которое отчетливо становится видным, если на Вашем компьютере установлена не одна операционная система, является то, что для доступа к данным находящимся в разделе другой операционной системы нет никакой надобности покидать FreeBSD. Другими словами, Вы можете просто смонтировать раздел в файловую систему FreeBSD и читать, писать или удалять файлы, находящиеся в этом разделе. (Разумеется, поклонники Linux лишь хмыкнут - подобные возможности не уникальны и давно присутствуют в любимой ими операционной системе. Но что скажут поклонники Windows? - прим. переводчика.)

Однако у Вас может возникнуть вопрос: «А как обстоят дела с запуском исполняемых файлов?» Если Ваша «другая» операционная система сделана корпорацией Майкрософт, и, кроме того, Вы воспользуетесь эмулятором Windows (Wine), то на Вашей FreeBSD вполне можно будет выполнять довольно большое количество Windows-приложений. (Кроме Windows-приложений, FreeBSD позволяет выполнять программы, скомпилированные для операционной системы Linux. Поддержка Linux-приложений реализована гораздо полнее и лучше, чем поддержка Windows-программ. Достаточно сказать, например, что под FreeBSD прекрасно себя чувствует Linux-версия сервера баз данных Oracle версии 8 - прим. переводчика.)

В сегодняшней статье я хочу продемонстрировать процесс установки и использования эмулятора Wine. Если все пойдет нормально, то я рискну испытать судьбу, попробовав запустить какое-нибудь Windows-приложение на компьютере, на винчестере которого, кроме FreeBSD, вообще ничего нет - ни одного раздела с софтом от Майкрософта.

Я поставлю Wine на двух машинах моей сети. На первой машине установлены Windows 98 и FreeBSD 4.3-RELEASE, выбор рабочей системы осуществляется в процессе загрузки. Вторая машина полностью управляется FreeBSD 4.3-RELEASE. Воспользовавшись аккаунтом суперпользователя, я откомпилирую и установлю Wine на обеих машинах:

su -
Password:
cd /usr/ports/emulators/wine
make install clean

После того как Wine установлен, на обеих машинах необходимо проверить конфигурационные файлы ядра на наличие в них необходимых для работы Wine опций. Оставаясь под суперпользователем, пишем:

cd /usr/src/sys/i386/conf
cp GENERIC WINE

Затем, используя мой любимый текстовый редактор, я открыла файл WINE для того, что бы убедиться в том, что в нем содержатся следующие строки:

options USER_LDT
options SYSVSHM
options SYSVSEM
options SYSVMSG

На моей FreeBSD 4.3-RELEASE, три опции SYS* уже были включены, так что мне пришлось добавить лишь параметр USER_LDT. Если Вам тоже пришлось что-нибудь добавить, сохраните внесенные изменения и перекомпилируйте ядро:

/usr/sbin/config WINE
cd ../../compile/WINE
make depend && make && make install && reboot

В последней строке на самом деле я вызываю сразу четыре отдельных команды, символы «&&» означают, что следующая команда из списка будет выполнена только при условии успешного выполнения предыдущей команды. Если Вы решитесь включить в список команду «reboot», убедитесь, что другие пользователи в это время ничего не делают на этой системе, поскольку система будет перезагружена немедленно после окончания этапа установки скомпилированного ядра.

После установки Wine, прилагающуюся к нему документацию можно будет прочитать при помощи команды man 1 wine, а так же посмотреть ее в каталоге /usr/local/share/doc/wine.

Для начала давайте попробуем запустить Wine на системе, на которой помимо FreeBSD установлена Windows 98. Для запуска Wine на этой машине мне придется преодолеть следующие этапы:

  • Найти и где-нибудь смонтировать раздел Windows.
  • Тщательно проверить и поправить конфигурационный файл Wine.
  • Протестировать получившуюся систему запуском какого-нибудь Windows-приложения.

Поскольку установка операционной системы на этот компьютер была произведена довольно давно, я воспользуюсь утилитой sysinstall для того, чтобы восстановить в памяти карту распределения дискового пространства на винчестере. Под суперпользователем:

/stand/sysinstall
Configure
Fdisk
пробел ad0

И вот я вижу нечто подобное:

Offset Size(ST) End Name PType Desc
 0 63 62 - 6 unused
 63 4176837 4176899 ad0s1 2 fat
 4176900 4016250 8193149 ad0s2 3 freebsd

Для выхода из fdisk'а я нажала клавишу q, а затем покинула sysinstall, несколько раз выбрав пункт «Cancel». Видно, что раздел Windows в FreeBSD имеет название ad0s1. Для того, что бы смонтировать этот раздел, сначала я создам для него точку монтирования под названием «dos»:

mkdir /dos

На всякий случай, я проверю права доступа к новому каталогу:

ls -l / | grep dos
drwxr-xr-x 2 root wheel 512 Aug 31 13:07 dos

Все нормально, все пользователи могут «читать» и «выполнять», и лишь один root может «писать» файлы.

Перед тем, как смонтировать раздел Windows на постоянной основе при помощи файла /etc/fstab, я должна убедиться, что он может правильно монтироваться вручную:

mount -t msdos /dev/ad0s1 /dos

Заметьте, что в качестве типа файловой системы используется «msdos», название устройства «/dev/ad0s1», а точкой монтирования выступает каталог «/dos». Поскольку в результате выполнения команды я просто получила обратно приглашение к работе, система смонтирована корректно. Это можно проверить при помощи команды df:

df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/ad0s2a 97M 36M 53M 40% /
/dev/ad0s2f 1.7G 567M 1.0G 35% /usr
/dev/ad0s2e 19M 2.0M 16M 11% /var
procfs 4.0K 4.0K 0B 100% /proc
/dev/ad0s1 2.0G 783M 1.2G 38% /dos

Кроме того, я могу проверить содержимое смонтированного раздела при помощи команды ls. Я воспользуюсь ключом «-F» для того что бы названия каталогов отличались от названий файлов символом «/»:

ls -F /dos

AUTOEXEC.BAT* COMMAND.COM* MSDOS.SYS* SCANDISK.LOG*
BOOT.INI* CONFIG.SYS* My Documents/ SETUPLOG.TXT*
BOOTLOG.PRV* DETLOG.TXT* NETLOG.TXT* WINDOWS/
bootsect.bsd* IO.SYS* Program Files/ RECYCLED/
ntdetect.com* ntldr*

Если Вы никогда прежде не монтировали файловые системы, то, вероятно, Вам понадобится несколько минут, что бы поиграться с командами «cd» и «ls». Имейте в виду, что многие файлы имеют названия в верхнем регистре, так что когда Вы будете к ним обращаться, пишите их с учетом регистра, поскольку FreeBSD чувствительна к регистру. Мало того, некоторые файлы содержат в названии символы пробела. Для доступа к таким файлам Вы можете попробовать напечатать первоначальные несколько букв такого файла и, нажав клавишу «Tab», воспользоваться функцией автодополнения имени файла, или поставить перед пробелом в имени файла символ обратного слеша «\»:

cd Program\ Files

Если Вы хотите монтировать раздел Windows непосредственно во время загрузки, аккуратно добавьте следующую строку в файл /etc/fstab:

/dev/ad0s1 /dos msdos rw 0 0

Удостоверьтесь, что Вы используете правильное название Windows-раздела, поскольку у Вас оно может отличаться. Перед сохранением убедитесь, что Вы не внесли в файл какой-нибудь ошибки. Я всегда стараюсь убедиться, что мои изменения в файле fstab работоспособны следующим способом:

shutdown now
press enter when receive prompt back, then type exit

Как только Вы вернетесь обратно, при помощи команды df -h, Вы сможете убедиться, что разделы смонтированы верно.

Теперь давайте отредактируем конфигурационный файл эмулятора Wine. В своем любимом текстовом редакторе откройте файл /usr/local/etc/wine.conf. Поскольку конфигурация Wine обычно не требует никаких изменений для работы, я сделаю в ней большие пропуски и покажу лишь участки, куда Вам придется внести некоторые изменения в соответствии с положением дел в Вашей системе:

more /usr/local/etc/wine.conf
WINE REGISTRY Version 2
;; All keys relative to \\Machine\\Software\\Wine\\Wine\\Config



[Drive A]
"Path" = "/mnt/fd0"
"Type" = "floppy"
"Label" = "Floppy"
"Serial" = "87654321"
"Device" = "/dev/fd0"

[Drive C]
"Path" = "/c"
"Type" = "hd"
"Label" = "MS-DOS"
"Filesystem" = "win95"


Вот тут следует остановиться, поскольку в этом месте необходимо внести изменения. Замените значение переменной Path с «/c» на название Вашей точки монтирования. Поскольку у меня точка монтирования называется «/dos», я изменила эту строку следующим образом:

"Path" = "/dos"

Сохраните изменения. Я обнаружила, что для корректной работы Wine этот файл должен быть скопирован в домашний каталог пользователя. Под суперпользователем я произведу некоторые изменения в домашнем каталоге пользователя genisis:

mkdir ~genisis/.wine
chown genisis ~genisis/.wine
cp /usr/local/etc/wine.conf ~genisis/.wine/config

Обратите внимание, что при копировании в каталог .wine я переименовала конфигурационный файл в «config». На данном этапе я покину аккаунт суперпользователя, поскольку конфигурация окончена. Под пользователем genisis я запущу сессию XWindow:

startx

Находясь в XWindow, в окне xterm'а, выберем для запуска какое-нибудь приложение:

cd /dos/WINDOWS
ls | more

Среди прочего, я обнаружила файл PROGMAN.EXE. Интрига заключается в том, что это Диспетчер Программ Windows. Я решила посмотреть, смогу ли я запустить его в FreeBSD под эмуляцией Wine:

wine -winver win98 -managed PROGMAN.EXE

После нескольких секунд ожидания я была поприветствована Диспетчером Программ. Щелкнув по меню «Файл», я выбрала пункт «Выполнить» и нажала на кнопку «Обзор». В результате этого я увидела обширный список файлов, находящихся на моем Windows-разделе.

Теперь началось веселье. При помощи метода проб и ошибок я стала выяснять, какие приложения я смогу запустить. Я начала с Калькулятора, поэтому, выбрав CALC.EXE, я нажала кнопку «Открыть», а затем кнопку «ОК». И, вуаля, я пользуюсь Калькулятором Windows.

Я щелкнула по ссылке «самые популярные» игры и увидела Solsuite 2001. Реклама обещала 282 различных пасьянса. Я выкачала инсталлятор, который назвался solsuite.exe и сохранила его в каталоге /dos.

Вернувшись в xterm'е я напечатала:

cd /dos
wine -winver win98 -managed solsuite.exe

И тут же получила сообщение об ошибке, гласящее об отсутствии каталога .wine. Давайте создадим в домашнем каталоге суперпользователя этот подкаталог и скопируем туда конфигурационный файл Wine:

mkdir ~/.wine
cp /usr/local/etc/wine.conf ~/.wine/config

Теперь, когда я повторила запуск wine, запустился мастер инсталляции программы. Я проследовала через все этапы установки и проследила за процессом копирования файлов. В самом конце инсталлятор завис, однако он сообщал, что до конца процесса установки осталось 0 минут, 0 секунд, поэтому я решила попытать счастья и для завершения установки воспользовался комбинацией «^c». Затем я набрала:

cd Program\ Files/SolSuite
wine -winver win98 -managed Solsuite.exe

Наступило время обзванивать соседей и хвастаться. Я успешно установила и запустил Windows-программу из FreeBSD и, кроме того, у меня возобновился свой интерес к карточным играм.

В качестве последнего теста, я перезагрузила компьютер в Windows 98. Там я нажала на кнопку «Пуск», и в меню «Программы» увидела новый пункт «Solsuite-Solitaire Card Games», внутри, правда, было пусто. Не испугавшись, я запустила проводник и дважды щелкнула по папке «Program Files», а затем вошла в каталог «Solsuite», где и обнаружила выполняемые файлы. Это хороший знак, подумала я. Я открыла в проводнике папку Windows, затем «Программы», а затем «Solsuite-Solitaire Card Games», и, перетащив туда правой кнопкой мыши файл solsuite.exe, выбрала в появившемся контекстном меню пункт «Создать ярлык».

Теперь, нажав «Пуск», «Программы», «Solsuite-Solitaire Card Games» и выбрав «Ярлык на SolSuite», я опять могу выбирать интересующий меня пасьянс. Я впечатлена.

Настало время для самого серьезного испытания. Я перехожу к компьютеру, на котором установлена только FreeBSD. Его жесткий диск полностью отформатирован в файловой системе UFS и, разумеется, не содержит ни одного компонента Windows. (На самом деле уважаемый автор зря так пугает потенциальных пользователей Wine - он изначально разрабатывался для выполнения Windows-приложений без какого-либо использования кода Windows - прим. переводчика).

Я вошла в систему под суперпользователем и создала там несколько каталогов и пустых файлов, наличие которых предполагается Windows-программами:

su -
Password:
mkdir -p /usr/local/lib/win/windows
cd /usr/local/lib/win/windows
mkdir system
touch win.ini
cd system
touch shell.dll shell32.dll winsock.dll wsock32.dll

Помните, как нам пришлось отредактировать одну строчку в файле /usr/local/etc/wine.conf, что бы она указывала на точку монтирования раздела Windows? Сейчас нам придется сделать это снова, правда указывать она будет на «поддельную» структуру Windows-каталогов:

[Drive C]
"Path" = "/usr/local/lib/win"

Затем я создам необходимые каталоги и скопирую конфигурационный файл суперпользователю и пользователю genisis:

mkdir ~/.wine
cp /usr/local/etc/wine.conf ~/.wine/config
mkdir ~genisis/.wine
chown genisis ~genisis/.wine
cp /usr/local/etc/wine.conf ~genisis/.wine/config

Оставаясь суперпользователем, я вернусь на и загружу инсталлятор Solsuite 2001. Теперь я сохраню его в /usr/local/lib/win. Теперь запущу сессию XWindow, xterm и напечатаю:

cd /usr/local/lib/win
wine -winver win95 -managed solsuite.exe

Опять начнет выполняться инсталляционная программа. Я получила сообщение об ошибке, в котором говорилось о невозможности обнаружить файл «explorer.exe», но я успешно его проигнорировала. Когда все закончилось, я напечатала:

cd Program\ Files/SolSuite
wine -winver win95 -managed SolSuite.exe

И хотя это было немного медленнее (но это и более старый компьютер), и, кроме того, мне пришлось подстроить конфигурацию дисплея, но я все-таки смогла поиграть в карточную игру, написанную для Windows, на компьютере, который полностью выделен под FreeBSD. Человек с исследовательским складом натуры получит массу удовольствия от Wine.

Все вышесказанное говорит о том, что эмулятор Wine - это программа из коллекции портов FreeBSD, с которой можно неплохо поразвлечься.

(0 Комментарии)

 
<< В начало < Предыдущая 1 2 3 4 5 6 7 8 9 10 Следующая > В конец >>

Всего 64 - 72 из 128

 


Реклама | Контакты | ©2005-2013 Алхимик