From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Wed, 7 Jan 2004 20:49:03 +0300 From: Mikhail Zabaluev To: devel@altlinux.ru Message-ID: <20040107174903.GA15291@mhz.mikhail.zabaluev.name> Mail-Followup-To: Mikhail Zabaluev , devel@altlinux.ru Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="1yeeQ81UyVL57Vl7" Content-Disposition: inline User-Agent: Mutt/1.4.1i Subject: [devel] =?koi8-r?b?/tTPIM3OxSDOxSDO0sHXydTT0SDX?= alternatives X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.3 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 07 Jan 2004 17:49:04 -0000 Archived-At: List-Archive: List-Post: --1yeeQ81UyVL57Vl7 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Доброго времени суток. Недавно в некоей дискуссии мне был задан вопрос: чем мне не нравится alternatives в его существующем виде. Я несколько раз брался размышлять на эту тему, прикидывал, что там можно, на мой взгляд улучшить. Вдобавок, жизнь заставила залезть внутрь программы с отладчиком. Попытаюсь здесь изложить то, что я надумал в этой связи. Без сомнения, новая утилита решает две проблемы, присущие update-alternatives: практическую трудность восстановления сломанной конфигурации и необходимость поддерживать уникальные имена для конфигурируемых ссылок. Однако в предложенной реализации обнаруживаются свои проблемы. Хранить конфигурацию в XML-файлах -- неплохая идея сама по себе, но надо иметь в виду, что имена файлов в POSIX и последовательности символов в языке разметки XML -- вовсе не одно и то же. Чтобы ощутить разницу, попробуйте создать альтернативы на ссылку, в имени которой есть не-ASCII символы (допустим, если кодировка имен в файловой системе KOI8-R). Libxml при разборе XML-файла конвертируёт текст в UTF-8 независимо от исходной кодировки документа. Можно представить, что имя файла побайтно корректно именно в исходной кодировке документа, но это большая натяжка на семантику XML, официально никак не поддерживается, да и с преобразованием обратно в исходную кодировку будет геморрой. Я вижу надёжное, пусть и не очень грациозное, решение -- кодировать в XML-конфигурации имена файлов так же, как они кодируются в URL. Другое, менее надежное решение -- иметь возможность указывать кодировку для имён файлов (не как кодировку документа, а в виде специального атрибута в конфигурации). Между прочим, эта проблема затрагивает все приложения, которые представляют имена файлов в XML. По поводу реализации у меня тоже есть возражения. Я уже говорил однажды, что схема кодирования имён ссылок имеет недостатки. Во-первых, она без хорошего повода сужает набор символов, которые можно использовать в именах, из-за того, что '/' конвертируется в '|', а '|' не конвертируется ни во что. Несерьёзно. Впрочем, это еще более академическая проблема, чем не-ASCII символы в именах. Есть ещё неиспользованный потенциал для более эффективного использования файловой системы и отсюда, лучшей масштабируемости, если не изобретать никакого "манглинга", а просто создавать в ссылочном каталоге структуру каталогов, отображающую реальные имена файлов. Это потребует несколько более трудоёмкой поддержки, зато позволит лучшим образом ограничить неавторизованное получение информации о содержимом каталогов (сейчас /etc/alternatives открыта всем даже на чтение, но даже если выставить права 751, останется возможность исследования по угаданным именам). Во время отладки заглянул в код разбора конфигурации. Недоумеваю. За использованием разных вкусных плюшек из C++ скрывается то, что называется wall-follower approach: все конфигурационные файлы засасываются в память программы. Это обрамляется в один большой XML-документ, который невозможно получить в физическом представлении, не заглянув в код, кажется, библиотеки libing. Т.е. фактически отдельные конфигурационные файлы могут быть даже не well-formed XML-документами. После этого всё это разбирается в развесистое дерево XML в памяти, из которого, насколько я понял, нужные вещи вытягиваются с помощью XPath. У меня, конечно, Pentium 4 и достаточно памяти, чтобы это работало пристойно. Но осадок остался. -- Stay tuned, MhZ JID: mhz@altlinux.org ___________ The longest part of the journey is said to be the passing of the gate. -- Marcus Terentius Varro --1yeeQ81UyVL57Vl7 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) iD8DBQE//EaPTKqCuNPJlLgRAjm2AJoDJmKbB68xL6qaFue+eWOmmvnDgwCeOR5u bq2tRkG1Kaxm7Z3i506flUI= =N5s6 -----END PGP SIGNATURE----- --1yeeQ81UyVL57Vl7--