Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

5. Исправление ядра с помощью заплаток

5.1 Наложение заплаток

Накладывающиеся обновления ядра распространяются в виде заплаток. Например, если у вас версия 1.1.45, и вас оповестили, что выпущен `patch46.gz' для него, это означает, что вы можете обновить ядро до версии 1.1.46 приложив эту заплатку. Вы можете захотеть сначала сделать резервную копию дерева исходных текстов ядра (сначала `make clean' и затем `cd /usr/src; tar zcvf old-tree.tar.gz linux' создаст для сжатый архивный файл с резервной копией).

Так, продолжая пример, приведенный выше, предположим, что у вас файл `patch46.gz' расположен в директории /usr/src. Выполним cd в /usr/src и выполним `zcat patch46.gz | patch -p0' (или `patch -p0 < patch46' если эта заплатка не является сжатой). Вы увидите некоторые вещи мелькающие на экране, которые сообщают вам, что программа пытается приложить куски заплатки на нужные файлы и информацию о том, удачна данная операция или нет. Обычно этот процесс идет слишком быстро, чтобы вы могли прочитать и вы можете не быть уверенными, удачна эта операция или нет, в этом случае вы можете использовать опцию -s для программы patch, которая заставляет patch выдавать только сообщение об ошибках (вы не получите сообщения ``эй, мой компьютер действительно что-то делает!'', но если вы это предпочитаете..). Для того, чтобы взглянуть на то какие разделы не прошли гладко, перейдите в директорию /usr/src/linux и посмотрите файлы с расширением .rej. Некоторые версии программы patch (старые версии, которые могли быть скомпилированы на более худших файловых системах) оставляют отклоненные файлы с расширением #. вы можете использовать команду `find' для того чтобы найти эти файлы:

    find .  -name '*.rej' -print

эта команда печатает список всех файлов, которые находятся в текущей директории и ее поддиректориях и имеют расширение .rej на стандартный вывод.

если все прошло правильно, то выполните команды `make clean', `config', и `dep' как описано в разделах 3 и 4.

Существует еще несколько опций для команды patch. Как было отмечено выше, patch -s запретит вывод всех сообщений за исключением сообщений об ошибках. Если вы храните ваше ядро где-то в другом месте, отличном от /usr/src/linux, то выполнение patch -p1 (в этой директории) правильно выставит заплатку. Другие опции команды patch хорошо описаны в ее справочной странице.

5.2 Если что-то неправильно

(Замечание: этот раздел относится к большинству старых ядер).

Наиболее частая проблема возникает когда заплатка модифицирует файл, называемый `config.in' и он не выглядит достаточно правильно, потому-что вы изменили его опции для вашей машины. Это было исправлено, но эта проблема может возникнуть со старыми выпусками ядра. Для исправления этой проблемы посмотрите в файл config.in.rej, и посмотрите что осталось сделать оригинальной заплатке. Изменения обычно обозначаются символами `+' и `-' в начале строки. Посмотрите строки, которые окружают эти символы и запомните где установлено `y' или `n'. Теперь отредактируйте файл config.in, и измените `y' на `n' и `n' на `y' где это нужно. Выполните команду

    patch -p0 < config.in.rej

и если она выдала, что операция проведена удачно (без ошибок), то вы можете продолжать работу выполняя настройку ядра и его компиляцию. Файл config.in.rej все равно останется, но вы можете удалить его.

если у вас все равно существуют проблемы, то это значит, что вы могли установить заплатку не с тем номером. Если программа patch сообщает `previously applied patch detected: Assume -R? (обнаружена предыдущая заплатка: использовать опцию -R?', то вы скорее всего пытаетесь приложить заплатку с номером меньшим, чем номер версии вашего ядра; если вы ответите `y', то программа попытается вернуть ваши исходные тексты к предыдущей версии, и скорее всего это вызовет ошибку; поэтому вам понадобится установить заново все дерево исходных текстов (что может быть не такой уж плохой идеей).

Для того чтобы убрать изменения внесенные заплаткой, используйте команду `patch -R' с оригинальной заплаткой.

Лучше всего в случае, когда заплатки делают что-то неправильно, начать применять ее с новым деревом исходных текстов (например извлеченным из одного из файлов linux-x.y.z.tar.gz), и запустит процесс заново.

5.3 Избавляемся от файлов .orig

После всего нескольких заплаток у вас накопится куча файлов с расширением .orig. Например одно ядро 1.1.51, которое было последний раз почищено при версии 1.1.48. Удаление .orig файлов сохранило примерно половину мегабайта дисковой памяти.

    find .  -name '*.orig' -exec rm -f {} ';'
эта команда позаботится о вас. Версии программы patch, которые используют знак # для отклоненных файлов используют знак тильды ~ вместо .orig.

Существует лучший способ избавится от .orig файлов, который зависит от GNU программы xargs:

    find .  -name '*.orig' | xargs rm
или ``довольно безопасный, но несколько более многословный'' метод:
    find . -name '*.orig' -print0 | xargs --null rm --

5.4 Другие заплатки

Также существуют другие заплатки (я буду назвать их ``нестандартными''), кроме поставляемых Linus. Если вы накладываете такие заплатки, то заплатки от Linus могут работать неправильно и вы должны будете либо убрать их, изменить исходные тексты или заплатку, либо установить новое дерево исходных текстов, или выполнить комбинацию описанных действий. Это может быть очень расстраивающим, так что если вы не хотите изменять исходные тексты (с возможно плохим результатом), то удалите нестандартные заплатки до приложения заплаток полученных от Linus, или просто установите новое дерево исходных текстов. Затем вы можете посмотреть работают ли нестандартные заплатки. Если они не работают, то вы либо задержались с использованием старого ядра, поиграйтесь с исходными текстами или измените заплатку, либо просто дождитесь выхода новой версии нестандартной заплатки.

Какие существуют заплатки не входящие в стандартный дистрибутив? Вы вероятно слышали о них. Я использую такую заплатку для того, чтобы курсор на моей консоли не мигал, я ненавижу мигающие курсоры (Эта заплатка часто обновляется (или по крайней мере обновлялась) по мере выпуска новых версий ядра. Для большинства новых устройств драйвера разрабатываются как загружаемые модули и частота использования нестандартных заплаток значительно уменьшается.


Вперед Назад Содержание
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...