Поддержка локалей в NetBSD 3.1

dixx аватар

Итак, выкладываю обещанный патч с полной поддержкой локалей для NetBSD 3.1. Подозреваю, что должно работать и для 3.0, но проверить негде, а под vmware её ставить пока времени нету. Дополнительно к штатному LC_CTYPE реализована поддержка LC_COLLATE, LC_TIME, LC_MESSAGES, LC_NUMERIC и LC_MONETARY. Портировано с FreeBSD 6.

Сразу скажу, что патч писался исключительно для служебных целей и поэтому обладает единственным свойством - он успешно ставится поверх дерева сорцов _И_ работающей системы, после чего успешно работает. Багов за почти год на боевой системе с высокой нагрузкой замечено не было.

Никаких мануалов, сорцов локалей, мэйков для них и т.п. не портировалось ввиду недостатка времени.

Также следует заметить, что не все локали в бинарном виде можно копировать - формат того же LC_TIME отличается от принятого в FreeBSD (я не стал менять внутренние структуры данных libc, так как это не нужно и было бы слишком геморройно - в штатном варианте они вполне достаточны). В силу этого и некоторых других соображений патч оформлен не в виде unified diff, а просто в виде набора файлов.

При наличии желания разобраться в том, как оно работает можно без проблем, плюс я с удовольствием отвечу на все вопросы.

В комплект входят следующие локали в скомпилированном виде:

en_US.ISO8859-1
en_US.UTF-8
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R
ru_RU.UTF-8

Итак, приступим. Для начала надо установить почти все исходники системы - потребуются архивы src.tgz, gnusrc.tgz, sharesrc.tgz и syssrc.tgz, которые можно взять на ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-3.1/source/sets. Дальше кладём патч из вложения к статье в /usr/ и распаковываем его поверх:

# cd /usr
# tar zxvf netbsd-locale.tar.gz

Патч обновляет каталоги include, share и src, частично заменяя файлы, а частично добавляя. На всякий случай он содержит также и оригинальные версии файлов, с расширением .orig.

После этого _собираем_ toolchain и libc:

# cd /usr/src
# . ./build.sh tools
# cd /usr/src/lib/libc
# make

Теперь можно устанавливать новый libc. Делать это следует _ТОЛЬКО_ командой mv, иначе вы рискуете поиметь _ОЧЕНЬ_ много геморроя:

mv libc.so.12.128.2 /lib/libc.so.12.128.2

Всё! При желании можно собрать ещё colldef, который позволит компилировать файды LC_COLLATE из исходников FreeBSD (их формат идентичен принятому в FreeBSD):

# cd /usr/src/usr.bin/colldef
# make 
# make install

Вроде ничего не забыл. Будут вопросы - задавайте :)

Прикрепленный файлРазмер
netbsd-locale.tar.gz27.41 кб

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
spinore аватар

тупой вопрос: а

тупой вопрос: а в каррент этого ещё нет? Если нет, может быть стоит нэтбсдшникам предложить сей патч?

dixx аватар

в current только

в current только lc_time (появилась недавно) и lc_ctype (изначально). я бы предложил, самому заниматься некогда :( говорил с людьми, которые готовы это сделать, но они утверждают, что для этого надо делать полноценный патч одним диффом, с мануалами и так далее. на это опять же, нет времени :((

spinore аватар

ясно... А под

ясно...
А под OpenBSD это сложно будет заставить работать?
У меня сейчас NetBSD 3.0, долго откладывал сей геморрой, но если возьмусь, то скорей всего пойду в сторону OpenBSD, чем NetBSD 3.1 (а там та же проблема с локалями...).

dixx аватар

в принципе -

в принципе - можно и под OpenBSD заставить.
а почему OpenBSD, если не секрет? оно же медленное, у нетки ядро существенно быстрее, да и сорцы поаккуратнее :))

spinore аватар

Цитата:в

Цитата:
в принципе - можно и под OpenBSD заставить.
а почему OpenBSD, если не секрет? оно же медленное, у нетки ядро существенно быстрее, да и сорцы поаккуратнее :))

Да, OpenBSD медленное, но для меня безопасность важнее...
Сорцы netbsd мб и поаккуратнее в смысле читабельности, но уж не в плане секъюрности. Пусть obsd работает и не быстро, но надёжно... задолбало что netbsd считают в порядке вещей ничего не отвечать на багрепорты в отличие, по крайней мере, от freebsd. Сейчас народ говорит что с фри я "просто неудачно попал" - типа, "неудалась у них 5я ветка..." Я не знаю, но возвращаться не хочется. И вообще динамика netbsd мне что-то не очень... вялотекущее, слабопрогрессирующее, баги... Я имею в виду баги в базовой системе. Может потом и вернусь, но пока нет. Кому-то может net больше понравится. Следует отметить изначальную постановку задачи: в жертву можно принести почти всё ради лучшей защиты. В такой постановке net не в лучшем ракурсе.

dixx аватар

У нас просто

У нас просто основной критерий скорость и надёжность. В этом плане нетку выбрали именно на базе большого количества секса с фрями - в пятёрке и шестёрке вообще что-то страшное творится. А с динамикой нетки какие-то странности, причём чем дальше, тем страннее :(( Смущает в первую очередь отсутствие четвёрки. Сорцы там уже давно не меняются. На массовые багофиксы тоже не похоже...

Хоть свой дистрибутив делай =)

spinore аватар

Я очень близко

Я очень близко знаком с фрёй и с net. На фрю возвращаться не буду точно. Либо net либо open. Вообще, "фря опопсела", инсталлятор кривоват, много лишнего, порты работают как попало... Net стройнее и логичней. Но косяки и тут. Так чтов пределе думаю будет либо open либо net. Если вам нужна скорость то чем не устраивает gentoo? Не сильно стабильно? если речь идёт о производительных серверах то всё циклится на smp и скорость фс, и в итоге выигрыш не у bsd, а драгонфлай думаю ещё сыроват. Как я понимаю, традиционной нищей BSD всегда была надёжность а не скорость. Бенчмарки и рекорды лучше бить на линухах ;-)

zeron аватар

делаю все как

делаю все как написано в статье, но дойдя до ./build.sh tools выдает:
./build.sh premission denied
че делать?

shattered аватар

build.sh исполним?

build.sh исполним?

zeron аватар

вобщем я сделал

вобщем я сделал sh build.sh tools, а он выдал что нет каталога /usr/obj и его действительно нету...