LinuxForum.Fans
Тема

Нужна помощь в проекте xroot - GUI для su/sudo

Автор: romkaromka 34 сообщений 9412 просмотров
#239175

romkaromka,
а почему б не использовать libc и libgettextlib ?

text

const
  LC_ALL = 6; { for setlocale() }
                                                                                                             
function SetLocale(Category: Integer; const Locale: PChar): PChar; cdecl; external name 'setlocale';         
{$linklib c}                                                                                                 

function DGetText(const DomainName: PChar; const MsgID: PChar): PChar; cdecl; external name 'dgettext'; {$linklib gettextlib}

const BASH_MSG = 'bash'; BASH_MSG_CNF='%s: command not found';

begin SetLocale(LC_ALL, ''); WriteLn(DGetText(BASH_MSG, BASH_MSG_CNF)); end.

[console]
$ fpc test.pp

$ ./test
%s: команда не найдена

$ echo $LANG
ru_RU.UTF-8

$ msgunfmt /usr/share/locale/ru/LC_MESSAGES/bash.mo | grep Content-Type
"Content-Type: text/plain; charset=KOI8-R\n"
[/console]

#239193

накопал следующее:
- в msegui есть модуль mselibc, поэтому вызвать

text
setlocale(LC_ALL,'');

теоретически не проблема,
- существует модуль на паскале gnugettext для lazarus (http://sourceforge.net/projects/lazarus-ccr/files/Code%20and%20Component%20Packages/dxgettext/), в котором есть dgettext,
задача сводится к подгонке модуля dxgettext:
- то, что он ищет не в директории /usr/share/locale/ru/LC_MESSAGES/bash.mo, а относительно директории проекта (переменная Directory в gnugettext.pas),
- procedure TDomain.OpenMoFile; отрабатывает неверно, условие pos('CHARSET=UTF-8',UpperCase(GetTranslationProperty('Content-Type')))=0 становится истиной, как результат:
DebugLogger ('The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.');

#239217

Выше был полностью рабочий фрагмент, "%s: команда не найдена" - это переведённое сообщение -- результат DGetText(), а не ошибка кода. Плата -- libgettextlib.so в зависимостях в дополнение к libc.so.
Можно подключать .so и получать из него нужные функции руками на этапе исполнения -- код сможет запускаться без .so и обнаруживать её отсутствие.
Можно попробовать "выковырнуть" нужные объектники из libgettextlib.la (fpc не умеет линковать из .la библиотеки) и подключить их статически через {$l}, вместо {$linklib}.
Либо допиливать перекодировку к библиотекам fpc.

#240009

Если есть решение без использования сторонних либ, обходясь только используемым языком программирования, то лучше без либы, хотя с либой libgettextlib.so тоже возможно сделать работоспособный вариант (http://freepascal.ru/forum/viewtopic.php?f=1&t=7889&start=15#p60577).
Пропатчил модуль gnugettext: http://code.google.com/p/xroot/source/browse/trunk/xroot/gnugettext.pas, сделал пока поддержку перевода .mo-файлов, которые в utf8 и в koi8-r.
Заранее известно, что перевести надо лишь: coreutils.mo, Linux-PAM.mo, bash.mo, shadow.mo, поэтому можно составить исчерпывающий список кодировок, которые надо включить в gnugettext. Надо лишь посмотреть исходники, которым принадлежат эти .mo-файлы, и определить списки используемых кодировок. Поэтому в данном случае поддержка абсолютно всех кодировок не нужна, а нужна поддержка только фактически используемых.
У sudo так вообще переводить нечего, все фразы, подлежащие анализу, не переведены в sudo.mo и не попали в него для перевода.
Поддержку каких кодировок надо обеспечить?

#240288
romkaromka написал:

Поддержку каких кодировок надо обеспечить?

исходя из этого http://pkgs.org/mandriva-2011/mandriva-main-release-i586/bash-4.2-9-mdv2011.0.i586.rpm.html и .mo-файлов у bash следует добавить кодировки ISO-8859-1, ISO-8859-2, ISO-8859-15, UTF-8, KOI8-R.
Добавил их.
Какие еще добавить?

#240650

http://ftp.gnu.org/gnu/bash/ - bash других кодировок не использует, а coreutils.mo, Linux-PAM.mo, shadow.mo в utf-8. Вроде как всё так.

#241390

Обмозговываю сборку пакетов.
Идея: собрать deb-пакеты и rpm-пакеты для всех дистрибутивов одним махом.
Алгоритм: собрать сначала в deb-дистрибутиве deb-пакет и через alien переконвертировать его в rpm-пакет, то есть скрипт http://code.google.com/p/xroot/source/browse/trunk/debian.compile.sh соберет одновременно deb- и rpm-пакеты.
Так как у xroot нет ничего кроме одного бинарника (плюс еще .desktop-файл и иконка к нему отсилы), то alien должен сделать rpm-пакет, работоспособный во многих rpm-дистрибутивах.
Годится такой подход? Вроде простенько, но и собирать легко пакеты, и пакеты достаточно универсальные получатся.

#241783

Собрал пакеты потестить http://code.google.com/p/xroot/downloads/list
Также есть сборка, не требующая установки.
Надо проверить не только работоспособность xroot (устанавливается в Утилиты->Системные), но и проверить насколько универсальными получились пакеты.
rpm-пакеты собраны в Ubuntu через alien из deb-пакетов - это должно позволить установить эти пакеты во всех rpm-дистрибутивах (spec-файл также имеется если нужно собрать rpm-пакет для конкретного дистрибутива в репозиторий).
Работу xroot надо проверить на разных локалях, разных кодировках и разных языках. По возможности погонять в различных дистрибутивах и DE.
Принимаются любые замечания.

#241788

romkaromka,
Установка в openSUSE12.1 (успешно):

text
# zypper in xroot-0.0.3-1.i386.rpm
Загрузка данных о репозиториях...
Чтение установленных пакетов...
Разрешение зависимостей пакетов...

Будет установлен следующий НОВЫЙ пакет: xroot

1 новый пакет для установки. Полный размер загрузки: 4,1 MiB. После этой операции будет использовано дополнительно 14,4 MiB. Продолжить? [y/n/?] (y): y Получение пакет xroot-0.0.3-1.i386 (1/1), 4,1 MiB (14,4 MiB после распаковки) Получение пакет xroot-0.0.3-1.i386 (1/1), 4,1 MiB (14,4 MiB после распаковки) Установка: xroot-0.0.3-1 [готово]

В классическом меню кде4: Утилиты - Другие программы - xroot (Графический интерфейс для su sudo)

#241791

Программы(графические) запускаются(те что запускаются) с английским интерфейсом. (но это приколы суси походу)
А dolphin к примеру не поддерживается -> может для "su -" стоит кнопку замутить, а лучше для kdesu и gksu в этой же программе, не вызывая дополнительных окон.

#241831
verg написал:
Программы(графические) запускаются(те что запускаются) с английским интерфейсом. (но это приколы суси походу)

Если и в консоли это так, то это сусе, может root так настроен неправильно.

verg написал:

А dolphin к примеру не поддерживается -> может для "su -" стоит кнопку замутить, а лучше для kdesu и gksu в этой же программе, не вызывая дополнительных окон.

С dolphin надо думать, вызов идет так: su --login -p -c "команда", через xroot это для dolphin проблема, хотя в консоли у меня работает такой вызов dolphin.
Вызов внешних программ kdesu/gksu - лишнее.

#242167

Уменьшил размер бинарника для 32bit до 1,5Mb - размер пакета стал 0,7Mb.
Объемы для 64bit примерно в 2 раза больше.

#243251

Выпущен релиз xroot-0.0.3.
Протестирован в Ubuntu, Debian, Fedora, Mageia, Mandriva, Edumandriva, OpenSuse, PCLinuxOS.

Войдите или зарегистрируйтесь, чтобы ответить.