Slax Linux - Быстрый, компактный и надёжный linux дистрибутив.

Операционная система Slax => Вопросы по шестой версии Slax => Тема начата: novah от 13 Сентябрь 2010, 20:15:58

Название: А теперь правильная русификация (бета, будем дополнять)
Отправлено: novah от 13 Сентябрь 2010, 20:15:58
Правильная, потому, что она так задумывалась автором слакс, универсальна для любых кодировок
на выбор, а то что у нас с русификацией траблы
(типа как минимум 3 локали), так это наше все...

Все ниже написанное относится к slax 6.1.2.
Так как 6.1.2 построенна на базе slackware 12.2, недостающие файлы или пакеты
берем из этого дистра...
Предполагается, что у вас в наличии имеются русские модули initrd.gz и russian.lzm
скачанные с оф фтп
Это все рассчитано на выбор нужной локали и кодировки из несколких,
в данном случае ru_RU.koi8-r, ru_RU.utf8, ru_RU.iso8859-5.
Выбор нужной локали производится при помощи параметра locale= на старте системы,
локаль по умолчанию ru_RU.utf8.
Если нужна только утф8 то все это можно подсократить (но не сильно)
Приступим
1)    Грузим оригинальную slax-6.1.2 с параметром max_loop=1024
Копируем например в /home русские initrd.gz, russian.lzm.
Распаковываем initrd командой gunzip initrd.gz получаем initrd
Создаем папку /home/init и монтируем туда initrd
mount /home/initrd /home/init -o loop
2)   Редактируем файл /home/liblinuxlive :
Функцию которая ловит локаль из командной строки (параметр ядру типа)
locale_id()
{
   debug_log "locale_id" "$*"
   local LOCALE i

   # first try to find out locale from boot parameters
   LOCALE="$1"
   if [ "$LOCALE" = "" ]; then LOCALE=$(cmdline_value locale); fi
   if [ "$LOCALE" = "" ]; then LOCALE=$(cmdline_value language); fi
   if [ "$LOCALE" = "" ]; then LOCALE=$(cmdline_value lang); fi

   # if not found, set it to locale from usr/lib/locale,
   # but only if there is just ONE directory, nothing more
   # (so we are sure which one to use)
   if [ "$LOCALE" = "" ]; then
      for LOCALE in $(ls -A1p /usr/lib/locale 2>/dev/null | grep / | sed -r "s:[/]|[.].*::"); do
         i="1$i"
      done
      if [ "$i" != "1" ]; then LOCALE=""; fi
   fi

   if [ "$LOCALE" != "" ]; then
      cat /usr/share/locale/locale.alias | sed -r "s/#.*//" | egrep "$LOCALE|$LOCALE""_" | tail -n 1 | tr -s "[[:space:]]" " " | cut -d " " -f 2- | tr -d " "
   fi
}
Меняем на всего лишь (keep it simle короче)
locale_id()
{
   debug_log "locale_id" "$*"
   local LOCALE

   LOCALE=$(cmdline_value locale)
   if [ "$LOCALE" != "" ]; then
    echo $LOCALE
   fi

   if [ "$LOCALE" = "" ]; then LOCALE="ru_RU.utf8"
    echo $LOCALE
   fi
}

Функцию кот отвечает за выбор параметра iocharset, в зависимости от локали
iocharset()
{
   debug_log "iocharset" "$*"
   local CHARSET IOCHARSET

   # if iocharset is explicitly set at the boot prompt,
   # return it regardless the locale settings
   IOCHARSET=$(cmdline_value iocharset)
   if [ "$IOCHARSET" != "" ]; then
      echo $IOCHARSET
      return 0;
   fi

   # else find out the iocharset from locale_id output, it should match
   # some kernel module (after stripping out few of the dashes)
   IOCHARSET=$(locale_id | cut -d . -f 2- | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)
   if [ "$IOCHARSET" = "" ]; then return 0; fi

   find /lib/modules -name "nls_*" | sed -r 's:^.*/|[.]ko$::g' | cut -b 5- | while read CHARSET; do
      if [ "$(echo $CHARSET | tr "[[:upper:]]" "[[:lower:]]" | tr -d -)" = "$IOCHARSET" ]; then
         echo "$CHARSET"
         return 0
      fi
   done
   return 1
}
Меняем на
iocharset()
{
   debug_log "iocharset" "$*"
   local CHARSET IOCHARSET

   IOCHARSET=$(cmdline_value iocharset)
   if [ "$IOCHARSET" != "" ]; then
      echo $IOCHARSET
   fi

   if [ "$IOCHARSET" = "" ]; then
   IOCHARSET=$(locale_id | cut -d . -f 2- | tr "[[:upper:]]" "[[:lower:]]");
      echo $IOCHARSET
   fi
}

Функцию кот на основании данных о локали и iocharset выбирает параметры монтирования фс на старте
fs_options()
{
   debug_log "fs_options" "$*"
   local NOAUTO IOCHARSET

   NOAUTO=$(cmdline_parameter noauto)
   if [ "$NOAUTO" = "" ]; then NOAUTO="auto"; fi
   if [ "$2" = "fstab" ]; then echo -n "$NOAUTO," ; fi
   if [ "$1" = "swap" ]; then echo "defaults,pri=1"; return 0; fi
   echo -n "noatime,users,suid,dev,exec"

   IOCHARSET=$(iocharset)

   if [ "$1" = "vfat" ]; then
      echo -n ",quiet,umask=0,check=s,shortname=mixed"
      if [ "$IOCHARSET" ]; then
         echo ",iocharset=$IOCHARSET"
      fi
   fi

   if [ "$1" = "iso9660" ]; then
      echo -n ",ro"
      if [ "$IOCHARSET" ]; then
         echo ",iocharset=$IOCHARSET"
      fi
   fi

   if [ "$1" = "ntfs" ]; then
      echo -n ",ro"
      if [ "$IOCHARSET" ]; then
         echo ",nls=$IOCHARSET"
      fi
   fi

   if [ "$1" = "ntfs-3g" ]; then
      echo ",locale=$(locale_id)"
   fi
}
Меняем на
fs_options()
{
   debug_log "fs_options" "$*"
   local NOAUTO IOCHARSET LOCALE

   NOAUTO=$(cmdline_parameter noauto)
   if [ "$NOAUTO" = "" ]; then NOAUTO="auto"; fi
   if [ "$2" = "fstab" ]; then echo -n "$NOAUTO," ; fi
   if [ "$1" = "swap" ]; then echo "defaults,pri=1"; return 0; fi
   echo -n "noatime,users,suid,dev,exec"

    IOCHARSET=$(iocharset)
    LOCALE=$(locale_id)

   if [ "$1" = "vfat" ]; then
      echo -n ",quiet,umask=0,check=s,shortname=mixed"
         echo ",codepage=866,iocharset=$IOCHARSET"
   fi

   if [ "$1" = "iso9660" ]; then
      echo -n ",ro"
         echo ",iocharset=$IOCHARSET"
   fi

   if [ "$1" = "ntfs" ]; then
      echo -n ",ro"
         echo ",nls=$IOCHARSET"
   fi

   if [ "$1" = "ntfs-3g" ]; then
      echo -n ",force"
#Здесь у меня стоит параметр force, для того чтобы монтировало автоматом
#некорректно отмонтированные ntfs
echo ",locale=$LOCALE"
   fi
}
C liblinuxlive все... (желетельно liblinuxlive в 001-core также заменить модифицированным)

3)   Из /home/init копируем usr.lzm в /home/, создаем /home/user, распаковываем usr.lzm
    lzm2dir usr.lzm /home/user
Добавляем недостающие файлы в /home/user/lib/gconv:
    CP1251.so
    gconv-modules
    ISO8859-5.so
    KOI8-R.so
    KOI8-RU.so
    KOI8-U.so
    UNICODE.so
Добавляем в /lib/locale
    ru_RU
    ru_RU.cp1251
    ru_RU.koi8r
    ru_RU.utf8
    ru_UA
    ru_UA.utf8
    uk_UA
    uk_UA.utf8
Эти же самые файлы добавляем по аналогии в russian.lzm или в 001-core.lzm или куда захочется )))
Запаковываем user в usr.lzm (предварительно удалив /home/usr.lzm)
dir2lzm user usr.lzm
Перезаписываем usr.lzm в /home/init
Размонтируем
umount /home/init
пакуем gzip -9 initrd
C initrd.gz вроде закончили, если я чегото не забыл ))).


Название: Re: А терь правильная руссификация(бета)
Отправлено: novah от 13 Сентябрь 2010, 20:16:42
Вторая часть Марлезонского балета:
Небольшая инфа:
После появления ядра linux-2.6.и_тд_итп, народ решил утф держать по умолчанию
включенным для консоли, что не хреново сказалось на отображении кои8, исо и тд.
Параметр ядра отвечающий за это на старте vt.default_utf8=1(по умолчанию)
Его конечно можно выставить на старте в 0, но хочется ж иметь возможность использовать разные локали
Кстати при любом reset терминал возвращается в исходное состояние, т.е. в утф.
Кроме того сущетвует команда unicode_stop (unicode_start), но я не сумел послать ее на все виртуальные консоли
(уже не помню почему, помню что глюкаватая она какаято).
Поэтому было использовано решение найденное гдето на просторах интернета...
Я для каждой локали модифицировал таблицы клавиатур, дабы они переключались одинаково ctrl+shift,
как это делать - http://pazuzu.pp.ru/novah/keycodes.txt
Готовое файло:
http://files.slax.org.ru/maps/ru5_iso.map.gz
http://files.slax.org.ru/maps/ru5_koi.map.gz
http://files.slax.org.ru/maps/ru5_utf.map.gz
Все что будет далее можно запихать в russian.lzm или в доп модуль,
но я расписываю как я делал, так мне было удобнее, нужно ж было знать что менять...

Создаем /home/001
Распаковываем 001-core.lzm
lzm2dir 001-core.lzm /home/001
/001/etc/rc.d/rc.slax
Меняем в нем
/usr/bin/reset на /usr/bin/clear

rc.local полностью меняем:

#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.

  . /usr/lib/liblinuxlive

#####################--KOI
rusikoi()
{
# Вот это вот все последующее предназначенно только
# для того чтобы переключить ядро в режим vt.default_utf8=0

local MODE_COMMAND
    MODE_COMMAND="echo -en '\033%@\033(K' && kbd_mode -a"
for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab | \
grep -o '\btty[[:digit:]]*\b'`
do
openvt -f -w -c ${TTY#tty} -- \
/bin/sh -c "${MODE_COMMAND}"
done

# Это для правильного отображения на ntfs
# ntfs-3g
if [ -r /sbin/mount.ntfs ]; then
rm -f /sbin/mount.ntfs
fi
touch /sbin/mount.ntfs && chmod 755 /sbin/mount.ntfs
    echo -e "#!/bin/bash" >> /sbin/mount.ntfs
    echo -e "/bin/ntfs-3g \$1 \$2 -o force,noatime,users,suid,dev,exec,locale=ru_RU.koi8-r,\$4" >> /sbin/mount.ntfs
}
#####################--/KOI


#####################--ISO
rusiiso()
{

# Вот это вот все последующее предназначенно только
# для того чтобы переключить ядро в режим vt.default_utf8=0
local MODE_COMMAND

MODE_COMMAND="echo -en '\033%@\033(K' && kbd_mode -a"
for TTY in `grep '^[^#].*respawn:/sbin/agetty' /etc/inittab | \
grep -o '\btty[[:digit:]]*\b'`
do
openvt -f -w -c ${TTY#tty} -- \
/bin/sh -c "${MODE_COMMAND}"
done

# Это для правильного отображения на ntfs
# ntfs-3g
if [ -r /sbin/mount.ntfs ]; then
rm -f /sbin/mount.ntfs
fi
    touch /sbin/mount.ntfs && chmod 755 /sbin/mount.ntfs
    echo -e "#!/bin/bash" >> /sbin/mount.ntfs
    echo -e "/bin/ntfs-3g \$1 \$2 -o force,locale=ru_RU.iso8859-5,noatime,users,suid,dev,exec,\$4" >> /sbin/mount.ntfs
}
#####################--/ISO

#####################--UTF8
rusiutf()
{
# ntfs-3g
if [ -r /sbin/mount.ntfs ]; then
rm -f /sbin/mount.ntfs
fi
    touch /sbin/mount.ntfs && chmod 755 /sbin/mount.ntfs
    echo -e "#!/bin/bash" >> /sbin/mount.ntfs
    echo -e "/bin/ntfs-3g \$1 \$2 -o force,locale=ru_RU.UTF8,noatime,users,suid,dev,exec,\$4" >> /sbin/mount.ntfs
}
#####################--/UTF8

#####################--MAIN
LOC=$(locale_id)
if [ "$LOC" = "ru_RU.utf8" ]; then
    rusiutf
fi
if [ "$LOC" = "ru_RU.koi8-r" ]; then
    rusikoi
fi
if [ "$LOC" = "ru_RU.iso8859-5" ]; then
    rusiiso
fi
if [ -r /root/.kde/share/config/kxkbrc ]; then
   rm -f   /root/.kde/share/config/kxkbrc
fi
####################--/MAIN

Полностью меняем rc.keymap:

#!/bin/sh
# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps.
#if [ -x /usr/bin/loadkeys ]; then
# /usr/bin/loadkeys ru4.map
#fi
#
    . /usr/lib/liblinuxlive
LOC=$(locale_id)
    if [ "$LOC" = "ru_RU.utf8" ]; then
/usr/bin/loadkeys ru5_utf.map
    fi
    if [ "$LOC" = "ru_RU.iso8859-5" ]; then
/usr/bin/loadkeys ru5_iso.map
    fi
    if [ "$LOC" = "ru_RU.koi8-r" ]; then
/usr/bin/loadkeys ru5_koi.map
    fi

Полностью меняем rc.font:

#!/bin/sh
#
# This selects your default screen font from among the ones in
# /usr/share/kbd/consolefonts.
#
  . /usr/lib/liblinuxlive
LOC=$(locale_id)
    if [ "$LOC" = "ru_RU.utf8" ]; then
setfont -v cyr-sun16.psfu.gz
    fi
    if [ "$LOC" = "ru_RU.koi8-r" ]; then
setfont -v koi8u_8x16.psfu.gz
    fi
    if [ "$LOC" = "ru_RU.iso8859-5" ]; then
setfont -v cyr-sun16 -m 8859-5_to_uni
    fi
Добавляем все файлы которые добавляли в initrd, запихиваем ru5_iso.map.gz, ru5_koi.map.gz,
ru5_utf.map.gz в /usr/share/kbd/keymaps/i386/qwerty/.
Если еще чегото хочется тоже добавляем или удаляем не нужные пакеты (обновляем и тд :-)))
Я midnight commander советовал бы поменять, опишу отдельно как это делается тем более это будет
верно для любого пакета. Заменяем /usr/lib/liblinuxlive модифицированным.
Пакуем обратно dir2lzm /001 001-core.lzm
C 001 вроде все... Терь должны отображаться нормально(я имею ввиду киррилицу)
и монтироваться на старте все файловые системы, про остальное будет дальше.


Распаковываем 002
Меняем /usr/bin/xconf:
Добавляем после строки    rm -f $GENERATED_CONFIGFILE
Вот это, добавляет в xconf русскую раскладку по ctrl+shift

########THIS FOR RUSSIAN (i know this is very nasty, but i dont have time to do this better)##########
TMP_FILE=/tmp/123
cat $XConfig > $TMP_FILE
PCUT=$( egrep -iB1000 -m1 "\"kbd\"" $TMP_FILE | sed -n "$=" )
head -n $PCUT $TMP_FILE > $XConfig
echo " Option \"XkbRules\" \"xorg\" " >> $XConfig
echo " Option \"XkbVariant\" \"winkeys\" " >> $XConfig
echo " Option \"XkbLayout\" \"us,ru(winkeys)\" " >> $XConfig
echo " Option \"XkbOptions\" \"grp:ctrl_shift_toggle,grp_led:scroll\" " >> $XConfig
PCUT2=$(tail -n +$PCUT $TMP_FILE | grep -B1000 -m1 "^[[:blank:]]*EndSection" | sed -n "$=" )
let PCUT+=PCUT2 && let PCUT-=1 && tail -n +$PCUT $TMP_FILE >> $XConfig
rm -f $TMP_FILE
#########################################

Если нужна еще и укр раскладка то меняем строку
echo " Option \"XkbLayout\" \"us,ru(winkeys)\" " >> $XConfig
на
echo " Option \"XkbLayout\" \"us,ru(winkeys),ua(winkeys)\" " >> $XConfig



Ну естественно проверяем это все дело, типа на старте locale=ru_RU.koi8-ru и в загруженном состоянии locale если все переменные koi8-ru, значит все гуд...
Предупреждение: никаких iocharset параметров больше нет, только locale, за ненадобностью все похерено...


Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 14 Сентябрь 2010, 00:08:21
Пока что вопросы есть? Если есть, то рисуем маслом, дабы улучшить(упростить) сей процесс, малявы по улучшению скриптов приветствуются немерянно...
Название: Вопросы есть, рисую маслом
Отправлено: Fugokker от 14 Сентябрь 2010, 18:34:00
Цитировать
Так как 6.1.2 построенна на базе slackware 12.2, недостающие файлы или пакеты
берем из этого дистра...

Цитировать
Добавляем недостающие файлы в /home/user/lib/gconv:
    CP1251.so
    gconv-modules
    ISO8859-5.so
    KOI8-R.so
    KOI8-RU.so
    KOI8-U.so
    UNICODE.so

А где конкретно их достать, можно ссылку? Слакварь большая...
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Fugokker от 14 Сентябрь 2010, 18:55:21
Цитировать
А где конкретно их достать, можно ссылку? Слакварь большая...

Вот здесь они лежат: ftp://ftp.slackware.com/pub/slackware/slackware-12.2/slackware/a/glibc-solibs-2.7-i486-17.tgz (ftp://ftp.slackware.com/pub/slackware/slackware-12.2/slackware/a/glibc-solibs-2.7-i486-17.tgz)

Пользуйся, друг, на здоровье, ничего для тебя не жалко!
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 15 Сентябрь 2010, 08:18:35
Пользуйся, друг, на здоровье, ничего для тебя не жалко!
Это вот к чему? Я что должен безвылазно на форуме сидеть и ждать пока ты вопрос задашь, и срочно бросаться тебе отвечать?
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Fugokker от 15 Сентябрь 2010, 15:46:47
Да не пер-живай, пошутил я. Сначала не дотумкал, потом сообразил, где примерно искать, и ответил сам себе.
Ты лучше вот что скажи: недостающие файлы нужно брать именно из "Слаквари" 12.2? Я пару раз делал модули из пакетов версии 13.1, и работали нормально. Оно же лучше, когда поновее, правда?
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: darkduck от 15 Сентябрь 2010, 18:33:51
недостающие файлы нужно брать именно из "Слаквари" 12.2? Я пару раз делал модули из пакетов версии 13.1, и работали нормально. Оно же лучше, когда поновее, правда?
Я думаю, что лучше все же 12.2, т.к. Slax на нем построен. Обратной совместимости никто не обещал ведь?
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Misha from Penza от 15 Сентябрь 2010, 19:47:23
Ты лучше вот что скажи: недостающие файлы нужно брать именно из "Слаквари" 12.2? Я пару раз делал модули из пакетов версии 13.1, и работали нормально. Оно же лучше, когда поновее, правда?
По-новее пакеты - гуд, но если они не потребуют еще чего более нового (например - ядра).
ну и тот же купс обновленный в версии 6.1.2 на моем старом принтере устроил мне пляски с бубном, хотя на версии 6.0.7 все работало без таких проблем. так что смотреть надо индивидуально.
Да, и некоторые вещи я предпочитал просто компилировать из сурсов - не так уж это и долго.
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 15 Сентябрь 2010, 22:46:10
Тут млин какая история, вот эти библиотеки glibc, про них шел базар разработчиков, и наш русский(кот собственно и делает эти все файлы, именно со стороны русского языка) сказал что ему надоела чехарда и он отказывается типа от кои исо и тд, будет по умолчанию утф делать(это щас типа по умолчанию исо), но сделал ли он это иль нет, иль забил ваще я не знаю, надо смотреть из 13.1 этот пакет, если там в locale-alias все еще исо, то смело можно, хотя плюсов от этого 0, просто те же файлы другой даты..., если нет, то тогда мои скрипты могут быть немножко не кошерными, я посмотрю, но по моему ничо не изменилось.
А ваще, я собираюсь нарисовать еще один фак по мс и по обновлению ntfs-3g, а то она не прилично старая...
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Fugokker от 18 Сентябрь 2010, 19:21:27
1. А "терь" попробуйте ввести параметр ядра не "locale=ru_RU.utf8", как у автора, а "locale=ru_RU.UTF-8", и посмотрите, что получится.
2. В скриптах rc.font, rc.keymap и изменённом rc.local отсутствуют соответствующие команды для локали "ru_RU.cp1251". Зачем эту локаль включали в начальный образ?
3. Почему команды для переключения ядра в режим "vt.default_utf8=0" размещены в скрипте rc.local? Это резервный скрипт для размещения команд пользователя, а не служебных. В любом релизе этот скрипт должен оставаться пустым. Почему нельзя было положить этот скрипт в /etc/rc.d или /etc/profile.d?
4. Бум дополнять...
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 19 Сентябрь 2010, 12:55:45
Делайте как хотите, я вам выложил, вы еще чемто не довольны, пихайте хоть в параметры ядру это все, cp1251 - гамно имхо, добавить не сложно, и если вы такой специалист, то и вопросов таких не должно возникать. rc.d - не скрипт(папка) и rc.local лежит именно там (чо сказать то хотели?  :)), profile.d - тоже, а менять стартовые скрипты- маразм, я именно поэтому менял rc.local, потому что я пользователь :-), а менять стартовые скрипты не хотел, чтобы было как можно меньше различий от оригнала.
Название: Раз пошла такая пьянка...
Отправлено: Fugokker от 20 Сентябрь 2010, 19:40:03
Цитировать
rc.d - не скрипт(папка) и rc.local лежит именно там (чо сказать то хотели?  ), profile.d - тоже, а менять стартовые скрипты- маразм, я именно поэтому менял rc.local, потому что я пользователь :-)

Я, может быть, не слишком ясно выразился. Я хотел сказать вот что.
Не надо заполнять скрипт rc.local, находящийся в каталоге /etc/rc.d. Он не для вас, а для тех, кто будет пользоваться вашей сборкой - для пользователей, значит. Если вы модифицируете "Слакс" и выпускаете собственный релиз - то вы уже никак не пользователь, согласитесь. Не нужно заполнять резервный скрипт своими командами, лучше написать новый и поместить его в каталог (а отнюдь не в папку) /etc/rc.d или /etc/profile.d, или ещё куда в автозапуск.
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 20 Сентябрь 2010, 22:27:06
Ну, млин, конечно можно отдельным скриптом делать, можно в rc.slax запихать, но что это меняет? Как раз в rc.local оно нагляднее выглядит, зачем плодить новые сущности? Если надо чтото свое добавить, то в конец файла да и все...
Каталог  :) Папка   ;) Директория  :D Выбирайте, можно и по этому поводу холивары вести  ;D
По факту вы правы, в линуксе нет понятия дир, папки и тд, есть файл, кот содержит в себе файлы, но для удобства оно папка  :)
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 21 Сентябрь 2010, 01:06:52
По поводу локалей, кот не используются, конечно можно их не включать, это уменьшит размер initrd, также можно потереть не нужные iocharset в initrd /lib, а потом  depmod -b /наша_дир
Название: Недопередополнил
Отправлено: Fugokker от 22 Сентябрь 2010, 19:13:57
Цитировать
/001/etc/rc.d/rc.slax
Меняем в нем
/usr/bin/reset на /usr/bin/clear

А зачем это? В оригинальном скрипте ошибка или как?

Цитировать
а менять стартовые скрипты- маразм
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 22 Сентябрь 2010, 22:26:46
Уффф, да я написал, что после этой команды слетает локаль koi8, сp1251, iso...
Название: Да-да, это тоже относится к нашей теме
Отправлено: Fugokker от 09 Октябрь 2010, 21:04:11
Как внутри bash-скрипта определить, запущена оболочка bash просто в консоли, или же внутри сессии X, в каком-нибудь эмуляторе терминала?
Название: Re: Да-да, это тоже относится к нашей теме
Отправлено: Fugokker от 10 Октябрь 2010, 09:42:33
Как внутри bash-скрипта определить, запущена оболочка bash просто в консоли, или же внутри сессии X, в каком-нибудь эмуляторе терминала?

Команда "tty" за это отвечает. Если она выдаёт "/dev/ttyN", значит, ты в консоли; если "/dev/pts/N" - в X-терминале.
Название: Правильная правильной рознь
Отправлено: Fugokker от 10 Октябрь 2010, 20:04:49
Добился кой-какого успеха в выставлении всех четырёх локалей описанным выше способом (через выставление параметра загрузки "locale=..."). Библиотеку "liblinuxlive" модифицировал по-другому. Кому интересно, могу описать.
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Artpsiholog от 10 Октябрь 2010, 23:24:30
Fugokker, определённо интересно.
Название: Re: А терь правильная руссификация (бета, дополняем)
Отправлено: Fugokker от 12 Октябрь 2010, 18:28:30
Таким образом, удалось справиться с поддержкой четырёх русских локалей: UTF-8, ISO-8859-5, KOI8-R и CP1251. Локаль назначается при загрузке передачей параметра ядру "locale=...". Параметр "iocharset" игнорируется.

1. Установка локали в консоли

1.1. Распаковать и смонтировать initrd (см. выше (http://slax.org.ru/forum/index.php?topic=95.msg447#msg447)).
1.2. Сгенерировать файлы соответствующих локалей и добавить в usr.lzm (там же).
1.3. Создать в каталоге /usr/lib/locale (т. е. в usr.lzm) символическую ссылку с именем ru_RU.iso8859-5, показывающую на /usr/lib/locale/ru_RU. (Вот и чешите репу, соображая, что я хотел сказать.)
1.4. перейти в каталог, где смонтирован начальный образ, и далее в <initrd>/lib/modules/2.6.27.27/kernel/fs/nls. В этот каталог надо добавить файл nls_utf8.ko - это модуль ядра, якобы отвечающий за работу с кодировкой UTF-8 в смонтированных системах. (Не знаю, где лучше его брать; я брал из аналогичного места в установленной Слаквари.).
1.5. запустить команду depmod -b <каталог монтирования initrd>.

1.6. изменить скрипт liblinuxlive в смонтированном initrd.
Функция locale_id() должна иметь вид:

locale_id()
{
   debug_log "locale_id" "$*"
   local LOCALE LOCALE_FOUND ALIAS_FILE

   ALIAS_FILE='/usr/share/locale/locale.alias'

   # First, try to find out locale from boot parameters
   LOCALE="$1"
   if [ ! "$LOCALE" ]; then LOCALE=$(cmdline_value locale); fi
   if [ ! "$LOCALE" ]; then LOCALE=$(cmdline_value language); fi
   if [ ! "$LOCALE" ]; then LOCALE=$(cmdline_value lang); fi

   # If locale is given without iocharset
   if [ ! "$(echo $LOCALE | grep -o "\\..*" | cut -c 2-)" ] && [ -r "$ALIAS_FILE" ]; then
      LOCALE_FOUND=$(cat $ALIAS_FILE \
                     | sed -r "s/#.*//" \
                     | grep -m 1 -o "[[:space:]]\+$LOCALE\\..\+\$" \
                     | tr -d "[:space:]")
      if [ "$LOCALE_FOUND" ]; then
         echo "$LOCALE_FOUND"
         return 0
      fi
   fi

   # Try to find some default locale
   if [ ! "$LOCALE" ]; then
      # Get list of locales from "/usr/lib/locale/"
      LOCALE_FOUND=$(ls -A1p '/usr/lib/locale' 2>/dev/null \
                     | grep -e "/$" \
                     | sed -r "s:\/::g" \
                     | tr -s "[:space:]" " ")
      # Check list of locales:
      # If more than one locale in the list, then...
      if [ $(echo $LOCALE_FOUND | grep -c " ") -gt 0 ]; then
         # ...cutting first locale from list
         LOCALE_FOUND=$(echo $LOCALE_FOUND | cut -d " " -f 1)
         # ...try to find some data in "/usr/share/locale/locale.alias"
         if [ -r "$ALIAS_FILE" ]; then
            # Cutting iocharset data
            LOCALE=$(echo $LOCALE_FOUND | sed -r "s/\\..*//")
            # Check in file
            LOCALE=$(cat $ALIAS_FILE \
                     | sed -r "s/#.*//" \
                     | grep -m 1 -o "[[:space:]]\+$LOCALE\\..\+\$" \
                     | tr -d "[:space:]")
         fi
      fi
   fi
   if [ ! "$LOCALE" ]; then LOCALE=$LOCALE_FOUND; fi

   # Return with code
   if [ "$LOCALE" ]; then
      echo "$LOCALE"
   else
      echo "POSIX"
      return 1
   fi
}

Функция iocharset() должна иметь вид:

iocharset()
{
   debug_log "iocharset" "$*"
   local IOCHARSET LOCALE

   # Find out the iocharset from "locale_id" output,
   # ignoring "iocharset" boot parameter
   LOCALE=$(locale_id)
   IOCHARSET=$(echo $LOCALE \
               | grep -o "\\..*" \
               | cut -c 2- \
               | tr "[[:upper:]]" "[[:lower:]]" \
               | sed -r "s/-//g;s/^iso8859/iso8859-/;s/^koi8/koi8-/;s/^euc/euc-/")

   # Find out the iocharset from "locale.alias" file
   if [ ! "$IOCHARSET" ] && [ -r '/usr/share/locale/locale.alias' ]; then
      IOCHARSET=$(cat '/usr/share/locale/locale.alias' \
                  | sed -r "s/#.*//" \
                  | grep -m 1 -o "[[:space:]]\+$LOCALE\\..\+\$" \
                  | sed -r "s/.*\\.//;s/[[:space:]-]//g" \
                  | tr "[[:upper:]]" "[[:lower:]]" \
                  | sed -r "s/^iso8859/iso8859-/;s/^koi8/koi8-/;s/^euc/euc-/")
   fi

   # "utf8" is the kernel built-in charset, there is no need to check it
   if [ "$IOCHARSET" = "utf8" ]; then
      echo "$IOCHARSET"
      return 0
   fi

   # System default charset
   if [ ! "$IOCHARSET" ]; then IOCHARSET="iso8859-1"; fi

   # Found string should match some kernel module (after stripping out few
   # of the dashes)
   if [ $(find '/lib/modules' -name "nls_*" \
          | sed -r "s:^.*/|[.]ko$::g" \
          | cut -b 5- \
          | tr "[[:upper:]]" "[[:lower:]]" \
          | sed -r "s/-//g;s/^iso8859/iso8859-/;s/^koi8/koi8-/;s/^euc/euc-/" \
          | grep -m 1 -o $IOCHARSET) ]; then
      echo "$IOCHARSET"
      return 0
   fi
   return 1
}

Функция fs_options() должна иметь вид:

fs_options()
{
   debug_log "fs_options" "$*"
   local NOAUTO IOCHARSET LOCALE

   NOAUTO=$(cmdline_parameter noauto)
   if [ "$NOAUTO" = "" ]; then NOAUTO="auto"; fi
   if [ "$2" = "fstab" ]; then echo -n "$NOAUTO," ; fi
   if [ "$1" = "swap" ]; then echo "defaults,pri=1"; return 0; fi
   echo -n "noatime,users,suid,dev,exec"

   IOCHARSET=$(iocharset)
   LOCALE=$(locale_id | sed -r "s/\\..*//")

   case "$1" in
      "vfat" )
         echo -n ",quiet,fmask=113,dmask=2,check=s,shortname=mixed"
         if [ $(echo $LOCALE | cut -d _ -f 1) = "ru" ]; then
            echo -n ",codepage=866"
         else
            echo -n ",codepage=437"
         fi
         if [ "$IOCHARSET" ]; then
            echo ",iocharset=$IOCHARSET"
         fi
      ;;
      "iso9660" )
         echo -n ",ro"
         if [ "$IOCHARSET" ]; then
            echo ",iocharset=$IOCHARSET"
         fi
      ;;
      "ntfs" )
         echo -n ",ro"
         if [ "$IOCHARSET" ]; then
            echo ",nls=$IOCHARSET"
         fi
      ;;
      "ntfs-3g" )
         echo -n ",force,fmask=113,dmask=2,locale=$LOCALE"
         if [ "$IOCHARSET" ]; then
            echo ".$IOCHARSET"
         fi
      ;;
   esac
}

1.7. Запаковать всё, что наизменяли, обратно в initrd.gz.
Название: Re: А терь правильная руссификация (бета, продолжаем дополнять)
Отправлено: Fugokker от 12 Октябрь 2010, 18:42:52
2. Установка консольных шрифтов и раскладок клавиатуры

2.1. Добавить скрипт /etc/rc.d/rc.font следующего содержания:

#!/bin/sh

. /usr/lib/liblinuxlive

if [ $(locale_id | sed -r "s/\\..*//g" | cut -c -2) = "ru" ]; then
  case $(iocharset) in
    "utf8" ) setfont -v Cyr_a8x16 ;;
    "iso8859-5" ) setfont -v Cyr_a8x16 -m 8859-5_to_uni ;;
    "koi8-r" ) setfont -v Cyr_a8x16 -m koi8-r_to_uni ;;
    "koi8-u" ) setfont -v Cyr_a8x16 -m koi8-u_to_uni ;;
    "cp1251" ) setfont -v Cyr_a8x16 -m cp1251_to_uni ;;
    * ) setfont -v ;;
  esac
else
  setfont -v
fi

2.2. Добавить скрипт /etc/rc.d/rc.keymap следующего содержания:

#!/bin/sh
# Load the keyboard map. More maps are in /usr/share/kbd/keymaps.
if [ -x /usr/bin/loadkeys ]; then

  # Get the locale string from liblinuxlive script and transform it
  . /usr/lib/liblinuxlive

  # Set keymap that depends on locale
  if [ $(locale_id | sed -r "s/\..*//g" | cut -c -2) = "ru" ]; then
    case $(iocharset) in
      "utf8" ) /usr/bin/loadkeys 'ruwin_ct_sh-UTF-8.map.gz' ;;
      "iso8859-5" ) /usr/bin/loadkeys 'ruwin_ct_sh-ISO8859-5.map.gz' ;;
      "koi8-r" ) /usr/bin/loadkeys 'ruwin_ct_sh-KOI8-R.map.gz' ;;
      "cp1251" ) /usr/bin/loadkeys 'ruwin_ct_sh-CP1251.map.gz' ;;
      * ) /usr/bin/loadkeys 'us.map.gz' ;;
    esac
  else
    /usr/bin/loadkeys 'us.map.gz'
  fi
fi

Внимание: те файлы раскладок, на которые ссылается скрипт (ruwin_ct_sh-UTF-8.map.gz и пр.) я брал частью из пакета kbd (ftp://ftp.slackware.com/pub/slackware/slackware-13.1/slackware/a/kbd-1.15.2-i486-1.txz) для Слаквари, а частью те, которые генерировал автор поста (http://slax.org.ru/forum/index.php?topic=95.msg448#msg448). Потом переименовал некоторые, чтобы имели одинаковый вид. В "Слаксе" по умолчанию нет этих файлов. Их нужно переписывать в каталог /usr/share/kbd/keymaps/i386/qwerty.

2.3. Добавить скрипт /etc/rc.d/rc.vtmap следующего содержания (вот и команда tty пригодилась, слава те господи):

#!/bin/sh

. /usr/lib/liblinuxlive

NUM_TTY=$(grep '^[^#].*respawn:/sbin/agetty' /etc/inittab | grep -o '\btty[[:digit:]]*\b')

if [ $(iocharset) = "utf8" ]; then
  for TTY in $NUM_TTY
  do
    openvt -f -w -c ${TTY#tty} -- /bin/sh -c "echo -ne '\033%G' && kbd_mode -u"
  done
else
  for TTY in $NUM_TTY
  do
    openvt -f -w -c ${TTY#tty} -- /bin/sh -c "echo -ne '\033%@\033(K' && kbd_mode -a"
  done
fi

2.4. Добавить скрипты /root/.bashrc и /root/.profile следующего содержания:

Код: (.basrc) [Выделить]
for TTY in $(grep '^[^#].*respawn:/sbin/agetty' /etc/inittab | grep -o '\btty[[:digit:]]*\b')
do
  if [ $(tty | sed -r "s:^/dev/::") = $TTY ]; then
    if [ $( . /usr/lib/liblinuxlive ; iocharset) = "utf8" ]; then
      openvt -f -w -c $(echo $TTY | sed -r "s:^tty::") -- /bin/sh -c "echo -ne '\033%G' && kbd_mode -u"
    else
      openvt -f -w -c $(echo $TTY | sed -r "s:^tty::") -- /bin/sh -c "echo -ne '\033%@\033(K' && kbd_mode -a"
    fi
    break
  fi
done

Код: (.profile) [Выделить]
# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n

2.5. Переписать скрипты .bashrc и .profile в каталог /etc/skel.
2.6. Все изменённые и добавленные файлы упаковать в отдельный модуль. Скрипт liblinuxlive должен находиться в каталоге /usr/lib. Готовый модуль переписать в каталог slax/base на сменном носителе.
Название: Re: А терь правильная руссификация (дополнили, терь поясним)
Отправлено: Fugokker от 12 Октябрь 2010, 19:17:21
Возникла заминка с переводом виртуальных терминалов в режим ASCII. По-хорошему, этим должен бы заниматься скрипт /etc/rc.d/rc.vtmap, посылающий "магические последовательности" во все виртуальные консоли системы, но он не срабатывает почему-то. Русский шрифт в консоли не виден. Пришлось добавлять .bashrc и .profile, которые посылают эту последовательность в один терминал при каждом старте "баша".
Название: Антр-ну, тык-скыть
Отправлено: Fugokker от 12 Октябрь 2010, 19:21:43
А вообще, поглядел я на эти авторские скрипты, которые исправлять пришлось, и пришёл к выводу, что у этого Томаса Эм ручонки уж если не совсем кривые, то точно кривоватые...
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 12 Октябрь 2010, 22:24:43
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_UTF8=y
ftp://ftp.slax.org/source/slax/kernel/2.6.27.27/config (ftp://ftp.slax.org/source/slax/kernel/2.6.27.27/config)
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Fugokker от 13 Октябрь 2010, 06:30:18
Мне нравится ваш лаконизм, но к чему вы это написали?
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 13 Октябрь 2010, 11:13:08
1.4. перейти в каталог, где смонтирован начальный образ, и далее в <initrd>/lib/modules/2.6.27.27/kernel/fs/nls. В этот каталог надо добавить файл nls_utf8.ko - это модуль ядра, якобы отвечающий за работу с кодировкой UTF-8 в смонтированных системах. (Не знаю, где лучше его брать; я брал из аналогичного места в установленной Слаквари.).
1.5. запустить команду depmod -b <каталог монтирования initrd>.

Я уже писал что оно не выделено модулем потому что является частью vmlinuz, но вы не слушаете, поэтому я дал ссылку на конфиг ядра.
зыЖ Или это я не вам писал? хз
зыЖЖ У Томаса ручки не кривоватые, он не обязан заниматься проблемами локалей других языков.
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Fugokker от 13 Октябрь 2010, 16:44:22
Я уже писал что оно не выделено модулем потому что является частью vmlinuz, но вы не слушаете, поэтому я дал ссылку на конфиг ядра.
зыЖ Или это я не вам писал? хз

Частью так частью, это дело поправимое.

зыЖЖ У Томаса ручки не кривоватые, он не обязан заниматься проблемами локалей других языков.

Раз дистрибутивы выпускает - обязан как миленький. Другие разработчики линюксов на liveCD решают проблемы многоязычности и Юникода сами, а не пускают на самотёк, чтобы пользователи бились головой об стенку. Сейчас Slax в этом плане - вообще белая ворона, какой линюкс ни возьми, там обязательно есть либо "ru_RU", либо "UTF-8", либо "ru_RU.UTF-8".
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: Misha from Penza от 13 Октябрь 2010, 19:59:40
Раз дистрибутивы выпускает - обязан как миленький. Другие разработчики линюксов на liveCD решают проблемы многоязычности и Юникода сами, а не пускают на самотёк, чтобы пользователи бились головой об стенку. Сейчас Slax в этом плане - вообще белая ворона, какой линюкс ни возьми, там обязательно есть либо "ru_RU", либо "UTF-8", либо "ru_RU.UTF-8".
он никому ничего не обязан, а теперь, когда проект заморозил - тем более.
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 13 Октябрь 2010, 21:21:16
Слакс по умолчанию ru_RU, что в 12.2 версии слаквары соответствует ru.RU.ISO8859-5, то что у нас чехарда с локалями писано и переписано много раз, это просто очередные повторы, далее, человек занимается этим около 10 лет, я лично около 7 лет назад услышал про эту разаработку, вы просто не понимаете с чего начиналось, для вас очевидна модульная система, алгоритм сжатия и тд, а то что он спонсировал за свои деньги именно aufs, сжатие squashfs при помощи алгоритма lzma - это все фигня, что он с 0 построил дистрибутив на кот базируется множество подобных (типа backtrack) тоже фигня, скрипты про которые говорят что они кривые, но за базу берут их тоже фигня, что начиналось все с unionfs тоже все кривое... То что он один всю систему инициализации продумал - ничего ни стоит, это был ПРИНЦИПИАЛЬНО новый подход к ливсд, МОДУЛЬНАЯ система, а то что у вас локаль не работает (не критично ни коим образом), у мну вопрос у вас утановлен стационарно slackware или нет?
зыЖ То как вы модифицировали кое какие скрипты мне нравится, молодец, я просто отошел от усложнения скриптов по той причине, что через 2 года я уже не помню что я хотел этим сказать  :) поэтому просто пишу для себя, конечно можно оптимизировать, у вас очень хорошо получается, мне просто - keep it simple  и чтоб работало, ну и конечно спицу вам в колеса, а где раскладка клавы соответствующая koi8-u

/etc/rc.d/rc.font
"koi8-u" ) setfont -v Cyr_a8x16 -m koi8-u_to_uni ;;

/etc/rc.d/rc.keymap
???
Название: Re: А терь правильная руссификация (бета, бум дополнять)
Отправлено: novah от 13 Октябрь 2010, 21:38:58
зыЖ Кстати не поленитесь скачайте слакс-ремикс и сравните liblinuxlive если вас это интересует, вот ребята пытаются, а ничо не получается с моей точки зрения, у мя на работе три селерона около 2,3GHz и не монтируется ntfs по умолчанию (я имею ввиду не локаль, просто нет файлов и все) а ядро кот они собрали типа говорит все замонтировано, естественно umount и тд, вот пример бездумной манипуляции скриптом liblinuxlive  и конфигурацией ядра, зато remix
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Fugokker от 14 Октябрь 2010, 06:28:48
что он с 0 построил дистрибутив на кот базируется множество подобных (типа backtrack) тоже фигня

А бэктрэк-то уже на "Ubuntu" базируется, ай-яй-яй...

скрипты про которые говорят что они кривые, но за базу берут их тоже фигня

Ну и написал бы он функции локализации нормальные, а то сам же потом всякие костыли под это дело подставлять пытался. На мой неискушённый взгляд, "liblinuxlive" куда аккуратнее можно было написать.

а то что у вас локаль не работает (не критично ни коим образом)

Кому не критично, а кому как...

у мну вопрос у вас утановлен стационарно slackware или нет?

В эмуляторе. Из-за "Слакса" поставил, кстати.

ну и конечно спицу вам в колеса, а где раскладка клавы соответствующая koi8-u

Ну нету, ты понимаешь, нету  :)
Могу дописать, если кто добрый соответствующий map.gz сладит.

А чё он проект-то заморозил, везде и всюду вроде значится как активный...
Название: А теперь правильная украинизация
Отправлено: Fugokker от 14 Октябрь 2010, 06:50:27
Вы, novah, сами-то не с Украины будете? Что-то братья-хохлы вяловато здесь выступают. У них, видать, таких проблем с локалями нет. А белорусов вообще не слышно. Счастливые люди!

Заодно и вопрос: зачем нужно размещение в начальном образе сгенерированных локалей? Стоит ли вообще паковать их туда?
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: novah от 14 Октябрь 2010, 18:38:34
Заодно и вопрос: зачем нужно размещение в начальном образе сгенерированных локалей? Стоит ли вообще паковать их туда?
Они используются на стадии загрузки для монтирования всех доступных дисков
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: novah от 14 Октябрь 2010, 19:19:32
"liblinuxlive" куда аккуратнее можно было написать.
Пробуйте, будет весело, только отдельную тему создайте.
Насчет аккуратности, тут куча проблем если вы не знаете, во первых скорость исполнения той или иной команды, касается циклов и тд во вторых там же на стадии загрузки ни разу не полноценный bash, так что пишите письма.
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Fugokker от 15 Октябрь 2010, 06:28:58
Они используются на стадии загрузки для монтирования всех доступных дисков

1. Насколько видно из многочисленных сообщений при загрузке системы, "все диски" монтируются уже после того, как смонтирована корневая система и полностью распакованы все модули.
2. Для проверки я опять взял оригинальный "нелокализованный" начальный образ и заменил в нём только "liblinuxlive". Модуль с локалями грузился вместе с остальными из каталога /slax/base. Результат - сменные носители смонтированы без проблем, локаль выставлена правильно.

Может, я упустил что-то?

И ещё: если есть потребность, чтобы в "liblinuxlive" учитывались украинские или белорусские локали - пишите письма...
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: novah от 15 Октябрь 2010, 11:11:03
А носиталь с которого грузится слакс учел?
Название: Эта, будем убирать ненужные файлы из initrd
Отправлено: Fugokker от 15 Октябрь 2010, 17:22:19
Мне очень жаль, но этот носитель тоже смонтировался правильно.
Название: Ну хочешь, так убирай, хватит уже модераторам надоедать
Отправлено: Fugokker от 15 Октябрь 2010, 17:31:01
На мой взгляд, добавление в начальный образ данных о локалях имеет смысл, если в процессе загрузки системы, например, подключаются модули, названные по-русски. Но мы ведь не будем так извращаться, правда?
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Misha from Penza от 15 Октябрь 2010, 18:24:39
а ситуацию, когда чейнжы на другом носители хранятся пробовал?
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Fugokker от 15 Октябрь 2010, 19:30:17
Эк вы, барин, всё слова-то какие мудрёные произносите, ажно ум за разум заходит. Это я не то что попробовать, а даже и представить себе не могу.
Название: Если я погибну, прошу считать коммунистом
Отправлено: Fugokker от 15 Октябрь 2010, 19:52:44
Нет, не пробовал.
Попробуем разобраться.
1. У тебя есть "Slax", в котором стоит параметр загрузки примерно такой: "changes=/dev/device/path/", причём "/dev/device" - это не тот девайс, с которого ты грузишься. Так?
2. "Slax" при работе записывает в этот раздел изменённые файлы, причём те, которые находятся в системном разделе. Так? (Я "Слаксом" редко пользуюсь.)
3. Ты боишься, что у созданных тобой файлов при загрузке системы будут неверно показаны русские буквы в именах. Так?
4. Отсюда я делаю вывод (возможно, ошибочный), что ты держишь в системном разделе много файлов с русскими именами.
5. Вопрос: зачем держать в системных каталогах файлы с русскими именами?

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

Нет, я скоро точно в дурдом попаду. Исправление загрузочных скриптов - это только начальная стадия сумасшествия, теперь я начал это осознавать...
Ладно хоть психушка близко находится, ехать не надо.
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: novah от 16 Октябрь 2010, 00:10:20
не, нинадо теорию гонять, попробуйте, потом пишите.
Флешка она и есть флешка, и там и русские и не русские живут, так что надо, кроме того, если монтирование раздела с рус именами явно основная задача, остальное уже паровозом, если загрузочный не монтируется с норм именами то  тогда ваще о чем может реч идти. Извращатся не будем, но косяки остались, не осмелюсь щас точно утверждать но поверьте оно там не зря лежит, если зря, то тогда, вам флаг в руки и медаль с занесением, я серьезно если зря лежит то тогда более 30ти локалей были зря сработаны в отдельный initrd, кстати есть процессо с загрузкой по сети на всякий случай.
ЗыЖ А давайте мы с вами по косточкам разберем liblinuxlive вместе с initrc и попробуем его маленько поменять чисто для кириллицы,  а потом тонкости крутить? предлагаю начать с обновления ядра...
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Misha from Penza от 16 Октябрь 2010, 12:31:45
Slax имеет кучу вариантов загрузки: с диска, с флешки (в основном на фате), по сети, в текстовом и графическом режимах, с загрузкой в оперативу, с загрузкой сохраненных изменений (причем хранящихся где угодно) и без оных.
а еще в чейнжах хранится "домашняя" папка рута, в котором тьма пользовательских файлов хранится, и с ними косяков тоже не должно быть.
Название: Ну вот, накликал беду на свою голову
Отправлено: Fugokker от 16 Октябрь 2010, 12:41:34
не, нинадо теорию гонять, попробуйте, потом пишите.

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

если загрузочный не монтируется с норм именами то  тогда ваще о чем может реч идти.

Да монтируется он, не слушаете вы меня...

я серьезно если зря лежит то тогда более 30ти локалей были зря сработаны в отдельный initrd

У автора функция locale_id(), если помните, ищет локаль, которая по умолчанию, в каталоге /usr/lib/locale. Вот он и накрутил этих образов с локалями для каждого языка. Мало ли, торопился человек, некогда продумать было. Немудрено, если у него там написаны перлы типа "find /lib/modules -name "nls_*" | sed -r 's:^.*/|[.]ko$::g' | cut -b 5- | while read CHARSET; do".

кстати есть процессо с загрузкой по сети на всякий случай.

Это мне точно не протестировать, прошу великодушно извинить меня, Нова-сан.

ЗыЖ А давайте мы с вами по косточкам разберем liblinuxlive вместе с initrc и попробуем его маленько поменять чисто для кириллицы,  а потом тонкости крутить? предлагаю начать с обновления ядра...

Тут явно вам начинать придётся, я мало того, что языка "С" не знаю, так и вообще не программист. Я же после вашего поста полтора месяца упарывался, чтобы переписать 3 функции на баше, куда там в ядро лезть.
А что может дать перекомпиляция ядра?
И потом, система же не чисто для кириллицы должна быть, она же интернациональная как бы, наменяем тут, а потом евреи нашим новым ядром воспользоваться не смогут, вот ведь беда...
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Fugokker от 16 Октябрь 2010, 12:45:39
Slax имеет кучу вариантов загрузки: с диска, с флешки (в основном на фате), по сети, в текстовом и графическом режимах, с загрузкой в оперативу, с загрузкой сохраненных изменений (причем хранящихся где угодно) и без оных.

Русские буквы в именах файлов видно во всех случаях, кроме "хранящихся где угодно" (этот случай не проверял).

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

М-да, но имена-то у настроечных файлов не русские. Зря боишься.
Ну да, пользовательские. У рута. Да-да. Извини, недопонял.

Придётся уступить настойчивым мольбам и попробовать этот вариант.
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: Fugokker от 16 Октябрь 2010, 13:12:31
Миша, на минуточку, раздел с "чейнжыми" отформатирован как что?
Название: Шофёр потрогал
Отправлено: Fugokker от 16 Октябрь 2010, 14:06:28
а ситуацию, когда чейнжы на другом носители хранятся пробовал?

Нуте-с, продолжим накоротке.

1. Взять оригинальный initrd.gz без всяких там модулей русификации. Ну их.
2. Изменить в нём liblinuxlive так, как я написал выше.
3. Я ещё добавил в тамошний usr.lzm махонький файлик gconv.modules, кашу маслом не испортишь.
4. Запаковать initrd обратно.
5. Сгенерировать нужные локали, скопировать мои варианты скриптов, изменённый liblinuxlive, всякие библиотечечки и прочее, о чём говорили.
6. Всё это упаковать в модуль.
7. Модуль - в каталог /slax/base, лучше сразу после семи основных.
8. Загрузиться. Хочешь, выбирай "changes=X", хочешь, "changes=Y", хочешь, делай вспышку слева, хочешь - вспышку справа. Русские буквы везде видно чётко. Как на заборе.

Старый liblinuxlive со всех своих разделов и подразделов стереть не забудь, понятное дело. А то прочитается ненароком, и будешь потом меня ругать.

Вот так-то. "VMWare", брат, не подведёт!
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: novah от 16 Октябрь 2010, 14:36:53
Мало ли, торопился человек
Это не обсуждается, конечно тут он накосячил, но один чел же не может адекватно проверить все кодировки, мож вы и правы, просто эти хвосты тянутся из 5 версии, но все равно надо проверить на разных платформах и носителях.
Название: Re: А теперь правильная русификация (бета, будем дополнять)
Отправлено: uj от 27 Ноябрь 2010, 20:54:01
сорри за оффтоп, многое прочитал, еще многое узнал для себя полезного)))
и русифицировал свою слаксу и раскладку натроил, но вот при монтировании флешки или USB-HDD наименование папок\файлов на русском криво отображается.
голова пухнет, ума не приложу что делать. подсобите пожалуйста...
Название: Телепаты в отпуске
Отправлено: Fugokker от 28 Ноябрь 2010, 13:26:55
Для начала погляди в файле /proc/mounts, с какой локалью и набором символов монтируется твой "USB-HDD".

За выставление локали в устройствах, монтируемых при старте системы, отвечают функции iocharset() и fs_options(), находящиеся в скрипте liblinuxlive. Исправленный скрипт должен лежать внутри initrd.gz.

И хотя бы опиши, что и как прописывал, а то "который год у меня в подполе раздаётся непонятный стук, подскажите, что делать".
Название: Re: А теперь правильная русификация (бета, буд
Отправлено: uj от 28 Ноябрь 2010, 17:03:56
из того, что помню:
1. скопировал 2 папки boot и slax на ssd нетбука, запустил liloinst.sh
2. загрузился с него, скопировал initrd.gz и russian.lzm в папки /boot и /slax/base
3. далее отсюда: http://slax.org.ru/forum/index.php?topic=61.msg220#msg220
(настроил переключение раскладки на winkeys и копету)
поступил именно так потому, что п.п.1 там где создается локаль слакса сказала, мол нет там ничего и создавать я там не буду (хотя был под правами рута)
вот собственно и все.
девайс подмонтировался так:
/dev/sdb1 /mnt/sdb1 ntfs ro,uid=0,gid=0, fmask=0177, dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1 0 0
...кажется это изза ntfs...

при том, только чтение, даже если я ему задаю -w или -o rw
...вот тут я теряюсь.
Название: Далее везде
Отправлено: Fugokker от 28 Ноябрь 2010, 19:17:44
Так это винегрет какой-то, а не русификация.
У тебя и не должны правильно подключаться носители USB.
В этой теме после долгих препирательств было описано, что именно нужно сделать, чтобы внешние носители при старте монтировались в нужной тебе кодировке.
Название: Буду локализовать молодым
Отправлено: Fugokker от 28 Ноябрь 2010, 19:34:02
поступил именно так потому, что п.п.1 там где создается локаль слакса сказала, мол нет там ничего и создавать я там не буду (хотя был под правами рута)

"п.п.1" - что это?

девайс подмонтировался так:
/dev/sdb1 /mnt/sdb1 ntfs ro,uid=0,gid=0, fmask=0177, dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1 0 0

Из чего вытекает:
1) "девайс" почему-то смонтирован в системе NTFS, а не в NTFS-3G;
2) смонтирован "только для чтения";
3) кодировка, тем не менее, UTF-8. Это он при старте так подключается или ты его перемонтировал позже?
4) с правами доступа к файлам вообще какой-то компот по умолчанию.

Использовать оригинальный "liloinst.sh" надо с умом и сообразительностью, поскольку он до ужаса примитивен. Видимо, придётся в соответствующем посте (http://slax.org.ru/forum/index.php?topic=62.0) выложить соображения по его изменению и дополнению. Эх, карамелька получилась, а не "liloinst" (господи, прости нас, грешных).

Так-тось вот, а ты думал - два файлика переписать, и залетает тебе линюкс, как метеорит. Эге...