freebsd ставим оболочку bash и настраиваем utf-8

freebsd ставим оболочку bash и настраиваем utf-8

Сообщение nezabudka » 29 авг 2016, 12:20

Решила на досуге познакомиться с bsd системами.
Выбор свой по началу остановила на netbsd. Но
в процессе знакомства выяснилось что система
не поддерживает кодировку utf-8 в частности
ее консоль. Мне это показалось очень странным,
потому что даже в plan 9 программы собираются на Си
с поддержкой utf-8. Во всех мануалах
которые мне удалось откопать настраивается
кирилица только в кодировке koi8-r. Пришлось
расширить район поиска до freebsd и я все таки
в последнем стабильном релизе этой системы
нашла то, что хотела - поддержку utf-8 в новом драйвере
консоли. Так как система славится своей рекордной
стабильностью, то и по умолчанию в ней используется
старый проверенный "веками" консольный драйвер.
Более того в предоставляемых по дефолту оболочках
отсутствует мой любымый bash. Здесь я приведу мануал
по первичной настойке системы - заменим стандартную
оболочку и русифицируем консоль в utf-8.

Логинимся под рутом и
для начала разрешим использовать новый консольный драйвер.
Вставим одну строчку в пустой конфиг /boot/loader.conf
kern.vty=vt
Теперь подправим кодировку в файле /etc/login.conf
и изменим параметры в определении класса на utf-8
Было:
russian|Russian Users Accounts:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:\
:tc=default:
Стало:
russian|Russian Users Accounts:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:tc=default:

Пересторим хеш базу что бы изменения вступили в силу:
Код: выделить все
cap_mkdb /etc/login.conf

Чтобы перевести пользователей на новый класс надо
воспльзоватся командой chsh или chpass для каждого
пользователя отдельно. Я перевожу и себя и рута и
поочередно наберу
Код: выделить все
chpass nez
chpass root

И строку Class: изменим на
Class: russian
Мы решили перевести всех пользователей на bash поэтому
тут же изменим всем оболочку, было
Shell: /bin/sh
Делаем:
Shell: /usr/local/bin/bash
Так как я меняю локализацию для всех пользователей
то выбираю конфиг /etc/profile для определения переменных:
export LANG="ru_RU.UTF-8"
export MM_CHARSET="UTF-8"

Кстати сказать что export будет работать только с башем так что
если вы остановитесь на этом и будете работать с другими оболочками
то нужно будет приводить эти сточки к соответствующему синтаксису
выбранной вами оболочки.

Еще один момент. Нам надо выбрать переключатель расскладки.
Посмотрим какие есть в наличае:
Код: выделить все
ls -la /usr/share/vt/keymaps/ | grep ru

Получим следующее
ru.kbd
ru.shift.kbd
ru.win.kbd
Последняя означает что расскладка будет переключатся
по нажатию Ctrl+Shift. Это мне подходит и я запишу в конфиг
/etc/rc.conf именно ее:
keymap="ru.win"
Проблемма с башем во фрибсд заключается в следующем. Баш во фряхе
зависит от сторонних библиотек которые могут быть изменены
другим сторонним софтом. Есть два пути решения. Оставить
рута в своей родной оболочке и оставить возможность
восстановить оболочку пользователя если подобное случится.
И второй способ, мне нравится больше, потому что и под
рутом я люблю работать в баше, установить статическую
сборку что бы башу не требовались для работы другие библиотеки.
В бсд системах предусмотрена возможность установки как бинарных
пакетов (pkg install <package>) самый быстрый вариант, так
и компиляцию через дерево портов(чуть не написала портежей
как в gentoo). В нашем варианте я выберу первый способ - установку
бинарного пакета.
Код: выделить все
pkg install bash-static

После завершения установки нужно добавить строку в файл /etc/fstab,
чтобы смонтировать файловую систему дескриптора, который необходим
оболочке bash:
Код: выделить все
echo "fdesc /dev/fd fdescfs rw 0 0" >> /etc/fstab

Посмотрим зависит ли наш установленный баш от каких либо библиотек:
Код: выделить все
ldd /usr/local/bin/bash

на что получаем ответ:
not a dynamic ELF executable
Наш башик получился хоть и намного большего размера но полностью
самостоятельный, автономный, а значит более безопасный.
Нам осталось только перезагрузится и зайти в новую оболочку
пользователя
Набираем команду date и смотрим вывод:
441
Установим консольный браузер и посмотрим отображение
страницы гугла в зоне ru. Для этого не надолго зайдем
под рутом и установим бинарный пакет
Код: выделить все
pkg install w3m

442
Ну и напоследок перключимся на русскую раскладку командой
Ctrl+Shift и наберем текст:
443
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 613
Фото: 180
Стаж: 3 года 2 месяца 4 дня
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 145 раз.

freebsd ставим оболочку bash и настраиваем utf-8

Спонсор

Спонсор
 

Вернуться в Разное

Кто сейчас на форуме

Сейчас этот форум просматривают: Yandex [Bot] и гости: 1