Все о Linux. LinuxRSP.Ru

[an error occurred while processing this directive]

Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Подготовка и компиляция ядра

Первым делом надо наложить патч, отвечающий за работу Extended Attributes. Желательно сохранить предыдущее ядро (естественно все последующие действия должны совершаться с правами root'а):


cd /usr/src
cp -Rv linux-2.2.17 linux-2.2.17.orig

Перейди в каталог, где ты сохранил файлы, и распакуй linux-2.2.17ea-0.7.2.patch.gz и linux-2.2.17acl-0.7.3.patch.gz:


gunzip linux-2.2.17ea-0.7.2.patch.gz
gunzip linux-2.2.17acl-0.7.3.patch.gz

Затем скопируй их в /usr/src:


cp linux-2.2.17ea-0.7.2.patch linux-2.2.17acl-0.7.3.patch /usr/src

Теперь можно пропатчить ядро:


cd /usr/src/linux
patch -p1 <../linux-2.2.17ea-0.7.2.patch >../patch1.err

Все сообщения о результатах работы сохранятся в файле /usr/src/patch1.err. Просмотри его на предмет содержания фраз типа ... FAILED -- saving rejects .... Наличие таких фраз означает, что установленное у тебя ядро не совпадает с оригинальным с Kernel.Org. Вероятнее всего, ядро, установленное у тебя на машине, уже было изменено разработчиками используемого тобой дистрибутива. Есть два выхода - скачать оригинальное ядро с ftp.kernel.org и использовать его (в этом случае существует вероятность того, что некоторые функции, поддерживаемые твоим текущим ядром, перестанут работать), или вручную изменить текущее.

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

При пропатчивании ядра 2.2.17, входящего в дистрибутив Trustix Secure Linux, я получил следующее сообщение об ошибке:


patching file fs/ext2/inode.c
Hunk #1 FAILED at 47.
Hunk #3 succeeded at 564 (offset 9 lines).
1 out of 3 hunks FAILED -- saving rejects to file fs/ext2/inode.c.rej

Т.е. команда patch не смогла внести изменения в файл /usr/src/linux/fs/ext2/inode.c, т.к. он не совпадает с оригинальным. Все невнесенные изменения вместе со строчками оригинального кода сохранены в файле /usr/src/linux/fs/ext2/inode.c.rej. Вот содержимое такого файла:


***************
*** 47,55 ****
   */
  void ext2_delete_inode (struct inode * inode)
  {
-         if (inode->i_ino == EXT2_ACL_IDX_INO ||
-             inode->i_ino == EXT2_ACL_DATA_INO)
-                 return;
          inode->u.ext2_i.i_dtime        = CURRENT_TIME;
          /* When we delete an inode, we increment its i_version. If it
             is ever read in from disk again, it will have a different
--- 47,52 ----
   */
  void ext2_delete_inode (struct inode * inode)
  {
          inode->u.ext2_i.i_dtime        = CURRENT_TIME;
          /* When we delete an inode, we increment its i_version. If it
             is ever read in from disk again, it will have a different

Первая часть файла (от "*** 47,55 ****" до "--- 47,52 ----") - это строки файла-оригинала, строки, начинающие с "-" подлежат удалению, вторая часть - это уже измененные строки, строки, начинающиеся с "+" подлежат добавлению (в данном примере они отсутствуют). Цифры "47" и "55" в начале означают номера строк (с какой по какую), которые подлежат изменению.

Найдем в файле /usr/src/linux/fs/ext2/inode.c функцию ext2_delete_inode. Как видно из предыдущего листинга, код ее должен начинаться с 48-й строки (47-я содержит конец предыдущего комментария). Вот начало функции в моем /usr/src/linux/fs/ext2/inode.c:


...
void ext2_delete_inode (struct inode * inode)
{
        if (is_bad_inode(inode) ||
            inode->i_ino == EXT2_ACL_IDX_INO ||
            inode->i_ino == EXT2_ACL_DATA_INO)
                return;
        inode->u.ext2_i.i_dtime        = CURRENT_TIME;
        /* When we delete an inode, we increment its i_generation.
...

Код данной функции не совпадает с тем, который ожидала найти команда patch. Здесь добавлен в условии вызов функции is_bad_inode. Удалим из условия проверки inode->i_ino == EXT2_ACL_IDX_INO и inode->i_ino == EXT2_ACL_DATA_INO, в результате останется следующий код:


...
void ext2_delete_inode (struct inode * inode)
{
        if (is_bad_inode(inode))
                return;
        inode->u.ext2_i.i_dtime        = CURRENT_TIME;
        /* When we delete an inode, we increment its i_generation.
...

Примерно таким же образом нужно поисправлять все ошибки. Но не стоит этого делать, если у тебя нет хотя бы начальных познаний в языке С.:) В этом случае лучше скачать оригинальное ядро.

После этого нужно наложить следующий патч - отвечающий за работу Linux ACLs.


cd /usr/src/linux
patch -p1 <../linux-2.2.17acl-0.7.3.patch >../patch2.err

Как и в предыдущем случае, нужно просмотреть файл /usr/src/patch2.err на предмет ошибок.

Теперь можно преступать к конфигурации ядра:


cd /usr/src/linux
make menuconfig

В меню Code Maturity Level Options отметь пункт Prompt for development and/or incomplete code/drivers. Затем в меню Filesystems найди пункт Extended filesystem attributes (EXPRIMENTAL). После выделения появятся еще два подпункта: Extended user attributes, отвечающий за поддержку расширенных атрибутов в системе и Access Control Lists, отвечающий за поддержку списков контроля доступа. Отметь их оба. Ниже есть пункт Second extended fs support, отвечающий за поддержку ext2. Он должен быть у тебя отмечен.:) У него есть подпункт Extended attributes for ext2 (DANGEROUS), отвечающий за поддержку расширенных атрибутов на файловой системе ext2. Отметь его. Без этой опции ничего работать не будет. Появится еще один подпункт - Extended attribute block sharing (EXPERIMENTAL). Данная опция позволяет использовать одни и те же расширенные атрибуты несколькими inode'ами. На данный момент это в стадии разработки, поэтому использовать не рекомендуется.

Сохрани полученную конфигурацию и собери новое ядро:


cd /usr/src/linux
make clean dep install modules modules_install

Пока не стоит перегружать машину.:)

Предыдущая

Содержание

Следующая


(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2024 LinuxRSP