Как применить патч в debian

Обновлено: 05.07.2024

8.1. Какие программы для управления пакетами имеются в Debian?

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

Важно понимать, что высокоуровневые инструменты управления пакетами, такие как aptitude или synaptic , для управления пакетами используют apt , который, в свою очередь, использует dpkg для управления пакетами системы.

See Chapter 2. Debian package management of the Debian reference for more information about the Debian package management utilities. This document is available in various languages and formats, see the Debian Reference entry in the DDP Users' Manuals overview.

8.1.1. dpkg

Это основная программа управления пакетами. dpkg может вызываться с многими параметрами. Наиболее часто используемые из них:

Показать список всех параметров: dpkg --help

Показать управляющий файл (и другую информацию) для указанного пакета: dpkg --info foo_VVV-RRR.deb

Установить пакет на жёсткий диск (т. е. распаковать и настроить): dpkg --install foo_VVV-RRR.deb

Распаковать архив Debian на жёсткий диск (но не настраивать): dpkg --unpack foo_VVV-RRR.deb . Учтите, что в результате данной операции пакет не обязан быть в рабочем состоянии; для правильной работы может потребоваться внесение изменений в некоторые файлы. Данная команда удаляет любую ранее установленную версию программы и запускает сценарий preinst указанного пакета (см. Раздел 7.6, «Зачем нужны сценарии preinst, postinst, prerm и postrm?»).

Настроить пакет, который был распакован ранее: dpkg --configure foo . Кроме всего прочего, эта команда запускает сценарий postinst указанного пакета (см. Раздел 7.6, «Зачем нужны сценарии preinst, postinst, prerm и postrm?»). Она также обновляет файлы, перечисленные в conffiles . Обратите внимание, что в качестве аргумента для параметра configure указывается имя пакета (т. е. foo), а не имя файла-архива Debian (т. е. foo_VVV-RRR.deb).

Распаковать файл с именем "blurf" (или группу файлов с именем "blurf*") из архива Debian: dpkg --fsys-tarfile foo_VVV-RRR.deb | tar -xf - 'blurf*'

Удалить пакет (но не его файлы настроек): dpkg --remove foo

Удалить пакет (вместе с файлами настроек): dpkg --purge foo

Вывести состояние установки пакетов, содержащих в имени строку (или регулярное выражение) «foo*»: dpkg --list 'foo*'

8.1.2. APT

APT is the Advanced Package Tool , an advanced interface to the Debian packaging system which provides the apt-get program. It provides commandline tools for searching and managing packages, and for querying information about them, as well as low-level access to all features of the libapt-pkg library. For more information, see the User's Guide in /usr/share/doc/apt-doc/guide.html/index.html (you will have to install the apt-doc package).

Starting with Debian Jessie, some frequently used apt-get and apt-cache commands have an equivalent via the new apt binary. This means some popular commands like apt-get update , apt-get install , apt-get remove , apt-cache search , or apt-cache show now can also be called simply via apt , say apt update , apt install , apt remove , apt search , or apt show . The following is an overview of the old and new commands:

Инструмент apt совмещает функциональность apt-get и apt-cache, а также по умолчанию использует красивый цветной формат вывода, что очень удобно. Для использования в сценариях или для продвинутого использования предпочтительнее использовать apt-get (а иногда он просто необходим).

apt-get provides a simple way to retrieve and install packages from multiple sources using the command line. Unlike dpkg , apt-get does not understand .deb files, it works with the packages proper name and can only install .deb archives from a source specified in /etc/apt/sources.list . apt-get will call dpkg directly after downloading the .deb archives [5] from the configured sources.

Часто используемые команды apt-get :

To update the list of packages known by your system, you can run:

(вы должны регулярно запускать эту команду для обновления списка пакетов)

Установить пакет foo и все его зависимости:

Удалить пакет из системы:

Удалить из системы пакет и все его файлы настроек:

To list all packages for which newer versions are available, run:

Обновить все пакеты в системе (без установки дополнительных пакетов или удаления пакетов):

Обновить все установленные в системе пакеты с установкой или удалением дополнительных пакетов, если это потребуется для обновления какого-то пакета:

(Команда upgrade оставит старую установленную версию пакета, если для разрешения новых зависимостей при обновлении потребуется установка дополнительных пакетов. Команда full-upgrade менее консервативна.)

Note that you must be logged in as root to perform any commands that modify packages.

Note that apt-get now also installs recommended packages as default, and thanks to its robustness it's the preferred program for package management from console to perform system installation and major system upgrades.

В комплект инструментов apt входит также программа для обработки запросов по списку пакетов apt-cache . Её можно использовать для поиска пакетов, имеющих определённую функциональность, с помощью простых текстовых запросов или регулярных выражений, а также для получения списка зависимостей из системы управления пакетами. Часто используемые команды apt-cache :

Найти пакеты, содержащие в своём описании слово :

Показать подробную информацию о пакете:

Показать зависимости пакета:

To print detailed information on the versions available for a package and the packages that reverse-depends on it:

For more information, install the apt package and read apt (8) , apt-get (8) , sources.list (5) and install the apt-doc package and read /usr/share/doc/apt-doc/guide.html/index.html .

8.1.3. aptitude

aptitude — это менеджер пакетов для систем Debian GNU/Linux, он предоставляет интерфейс к инфраструктуре управления пакетами apt. aptitude представляет собой текстовый интерфейс на основе библиотеки curses. Действия можно выполнять как из визуального интерфейса, так и из командной строки.

aptitude может использоваться для лёгкого и быстрого выполнения задач по управлению пакетами. Она позволяет пользователю просматривать список пакетов и выполнять такие задачи по управлению пакетами как установка, обновление и удаление.

Помимо функциональности apt-get , aptitude имеет много других дополнительных возможностей:

обеспечивает лёгкий доступ ко всем версиям пакета;

позволяет легко отслеживать устаревшее ПО, занося его в «список устаревших пакетов и пакетов, созданных локально»;

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

можно использовать для установки заранее сформированных наборов для определённых задач. Подробности см. в Раздел 8.1.5, «tasksel»;

aptitude in full screen mode has su functionality embedded and can be run by a normal user. It will call su (and ask for the root password, if any) when you really need administrative privileges.

С aptitude можно работать, используя визуальный интерфейс (просто запустить aptitude ), или непосредственно из командной строки. Используемый синтаксис командной строки очень похож на синтаксис apt-get . Например, для установки пакета foo , можно выполнить aptitude install foo .

Note that aptitude is the preferred program for daily package management from the console.

For more information, read the manual page aptitude (8) and install the aptitude-doc package.

8.1.4. synaptic

synaptic is a graphical package manager. It enables you to install, upgrade and remove software packages in a user friendly way. Along with most of the features offered by aptitude, it also has a feature for editing the list of used repositories, and supports browsing all available documentation related to a package. See the Synaptic Website for more information.

8.1.5. tasksel

Иногда бывает трудно найти подходящий комплект пакетов для выполнения определённой задачи. Разработчики Debian определили задачи , представляющие собой наборы из нескольких пакетов Debian, предназначенных для определённой деятельности. Задачи можно устанавливать с помощью программы tasksel или aptitude .

Typically, the Debian installer will automatically install the task associated with a standard system and a desktop environment. The specific desktop environment installed will depend on the CD/DVD media used, most commonly it will be the GNOME desktop ( gnome-desktop task). Also, depending on your selections throughout the installation process, tasks might be automatically installed in your system. For example, if you selected a language other than English, the task associated with it will be installed automatically too and if the installer recognises you are installing on a laptop system the laptop task will also be installed.

8.1.6. Другие инструменты управления пакетами

8.1.6.1. dpkg-deb

Вывести список допустимых параметров: dpkg-deb --help

Определить, какие файлы содержатся в файле-архиве Debian: dpkg-deb --contents foo_VVV-RRR.deb )

Извлечь файлы из указанного архива Debian в определённый пользователем каталог: dpkg-deb --extract foo_VVV-RRR.deb tmp извлечёт все файлы из foo_VVV-RRR.deb в каталог tmp/ . Это удобно для просмотра содержимого пакета в отдельном каталоге без его установки в основное дерево каталогов.

Извлечь из пакета файлы с управляющей информацией: dpkg-deb --control foo_VVV-RRR.deb tmp .

Учтите, что любые пакеты, просто распакованные командой dpkg-deb --extract , будут установлены некорректно, для установки следует использовать dpkg --install .

More information is given in the manual page dpkg-deb (1) .

8.2. Говорят, что Debian способен обновить работающую программу; как это делается?

Ядро (файловая система) в системах Debian GNU/Linux поддерживает замену файлов, даже когда они используются.

Мы также предоставляем программу start-stop-daemon , которая используется для запуска служб при загрузке компьютера или их останова при изменении уровня выполнения (например, при переключении из многопользовательского в однопользовательский или для выключения компьютера). Эта же программа используется сценариями установки при установке нового пакета со службой, для остановки работающей службы и её перезапуска при необходимости.

8.3. Как узнать, какие пакеты установлены в системе Debian?

Чтобы получить список всех установленных пакетов, выполните команду

Эта команда выведет для каждого пакета однострочную сводку, включающую два символа состояния (объясняемые в заголовке), имя пакета, установленную версию и краткое описание.

To learn the status of packages whose names match any pattern beginning with "foo", run the command:

Чтобы получить более подробный отчёт о состоянии определённого пакета, выполните команду:

8.4. How do I display the files of an installed package?

Чтобы вывести список файлов установленного пакета foo , выполните команду

Учтите, что файлы, созданные сценариями установки, не отображаются.

8.5. Как определить пакет, которому принадлежит определённый файл?

Чтобы определить, в каком пакете содержится файл с именем foo , выполните одну из следующих команд:

dpkg --search foo

Эта команда ищет foo в установленных пакетах. (В настоящий момент это эквивалентно поиску всех файлов с расширением .list в каталоге /var/lib/dpkg/info/ и выводу имён всех пакетов, которые содержат заданное имя файла, и отклонений.)

Более быстрая альтернатива этому — программа dlocate .

zgrep foo Contents-ARCH.gz

Эта команда ищет файлы, содержащие в своих полных именах путей подстроку foo . Файлы Contents-ARCH.gz (где ARCH представляет нужную архитектуру) расположены в основных каталогах пакетов (main, non-free, contrib) на FTP-сайте Debian (то есть, в /debian/dists/buster ). Файл Contents относится только к тем пакетам, что расположены в структуре подкаталогов того же каталога, где находится и он сам. Поэтому, чтобы найти пакет, содержащий файл foo , пользователю нужно искать более чем в одном файле Contents .

Преимущество этого метода над dpkg --search состоит в том, что будут найдены файлы в тех пакетах, которые могут быть не установлены в вашей системе.

apt-file search foo

If you install the apt-file package, similar to the above, it searches files which contain the substring or regular expression foo in their full path names. The advantage over the example above is that there is no need to retrieve the Contents-ARCH.gz files as it will do this automatically for all the sources defined in /etc/apt/sources.list when you run (as root) apt-file update .

8.6. Why is `foo-data' not removed when I uninstall `foo'? How do I make sure old unused library-packages get purged?

Some packages are split in program (`foo') and data (`foo-data') (or in `foo' and `foo-doc'). This is true for many games, multimedia applications and dictionaries in Debian and has been introduced since some users might want to access the raw data without installing the program or because the program can be run without the data itself, making `foo-data' optional.

Подобное относится и к библиотекам: обычно они устанавливаются, так как пакеты приложений зависят от них. Когда пакет приложения вычищается, пакет библиотеки может остаться в системе. Или когда пакет приложения больше не зависит, скажем, от libdb4.2, а зависит от libdb4.3, то пакет libdb4.2 может остаться в системе при обновлении пакета приложения.

In these cases, `foo-data' doesn't depend on `foo', so when you remove the `foo' package it will not get automatically removed by most package management tools. The same holds true for the library packages. This is necessary to avoid circular dependencies. However, if you use apt-get (see Раздел 8.1.2, «APT») or aptitude (see Раздел 8.1.3, «aptitude») as your package management tool, they will track automatically installed packages and give the possibility to remove them, when no packages making use of them remain in your system.

[5] Notice that there are ports that make this tool available with other package management systems, like Red Hat package manager, also known as rpm

Практически каждый разработчик программного обеспечения (ПО), программист или верстальщик сталкивается (и довольно часто) с необходимостью модификации некоторой части рабочего проекта или даже нескольких строк кода. Особенно это актуально, когда в разработке участвует несколько человек, которые могут вносить правки в разных частях проекта. Для удобства и автоматизации действий по составлению таких правок используются специализированные утилиты. Одной из таких является утилита patch и о ней более подробно будет рассказано в данной статье.

Что такое патч?

Говоря о патчах вкупе с утилитой patch, следует подразумевать, что это касается исключительно текстовых данных. Другими словами, происходит работа с исходными кодами проекта, будь то код C++, PHP, HTML и т. д. Вообще, все самые «суровые» программисты или разработчики в процессе своей совместной работы над проектом обмениваются исключительно отдельными правками, а не пересылают друг другу актуальные версии проектов целиком.

Сама правка, т. е. текстовые изменения в исходном коде проектов (для одного его файла или сразу для нескольких) и есть патч или «заплатка». Патч, помимо самих изменений кода содержит также и некоторую служебную информацию, необходимую для правильного «наложения заплатки», т. е. для установки патча. Таким образом, патч — это текстовый файл определённого формата, содержащий в себе данные и инструкции для приведения конечного файла (или проекта) к нужному или актуальному виду.

Утилита patch умеет быстро и эффективно распоряжаться данными из файла-патча, используя для этого хранящиеся в нём инструкции. И таким образом выполняет все рутинные действия по редактированию. Пользователю (разработчику) необходимо лишь правильно выполнить соответствующую команду, задав все необходимые аргументы и опции.

Синтаксис и основные опции команды patch

Нет ничего удивительного в том, что утилита patch относится к категории ПО, которое обязательно должно быть установлено на любой машине для разработки программ, да и вообще для ведения разработки. Практически любой дистрибутив Linux предоставляет утилиту patch предустановленной по-умолчанию.

Стоит также отметить, что по своей функциональности, patch довольно сложна и обладает, без преувеличения, просто огромным набором опций. По этой причине в данной статье будут приведены только самые распространённые приёмы при работе с этой утилитой и только сопутствующие им опции команд. Синтаксис команды patch следующий:

Здесь originalfile – это файл, который необходимо «пропатчить» до актуального состояния. А patchfile – файл-патч. Сразу возникает вопрос: а откуда берётся этот файл-патч? Ответ: он генерируется другой утилитой — diff, которая находит построчные различия между файлами. Либо же патч может быть составлен вручную, автором, если он знаком с соответствующим форматом. Но это бывает крайне редко, обычно прибегают к помощи diff или её аналогов.
В следующей таблице приведены опции команды patch, которые используются наиболее часто:

Применение патчей к отдельным файлам

Прежде, чем начать рассмотрение практических примеров, необходимо сказать несколько слов о той самой утилите, которая и создаёт патчи — diff. Она может генерировать патчи трёх типов — простой, контекстный и контекстный унифицированный. Простой гораздо более компактный по размеру, чем контекстные, но последние гораздо более удобочитаемы и понятны для восприятия пользователем. Для того, чтобы сгенерировать простой патч, для команды diff никаких специальных опций не требуется. А для генерации контекстного или унифицированного контекстного патчей предназначены опции -с и -u соответственно:

Пусть имеется файл с кодом C++ ChildClass.cpp:

И пусть в этот файл было внесено следующее изменение: метод valueSqr() был переименован в calcSqr(). Тогда контекстный патч (файл contextpatch) будет выглядеть следующим образом:

Теперь, чтобы пропатчить старую версию ChildClass.cpp, нужно выполнить команду:

В результате будет получен файл ChildClass_new.cpp с актуальным содержимым.

Работа с проектами

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

Пусть имеется старый проект в каталоге base-project. Внутри него имеются подкаталоги include и src, в которых, в свою очередь находятся файлы с изменениями — ChildClass.h (в каталоге include) и ChildClass.cpp (в каталоге src). Сам изменённый (актуальный) проект был помещён в отдельный каталог new-project. Подготовка патча будет выглядеть следующим образом:

Сгенерированный файл-патч project-patch:

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

Как видно, вместо ключа -i можно использовать символ «<» для перенаправления потока из файла на вход команды patch. Здесь также нужно обратить внимание и понимать, что при выполнении команды patch активным каталогом должен быть каталог уровнем выше, чем каталог проекта, к которому применяется патч, ведь используются относительные пути. Параметр -p0 (см. таблицу из главы «Синтаксис и основные опции команды patch») указывает, что применение патча должно затрагивать весь проект. Если бы этот параметр был бы равен -p1, то патч применялся не выше уровня каталогов include и src. Нередко бывают случаи, когда кроме изменений в содержимом файлов меняется также и содержимое каталогов проекта. Другими словами, добавляются новые или удаляются ранее существовавшие файлы и подкаталоги. Пусть, например, в проект из предыдущего примера в каталог include был добавлен файл Readme.txt с содержанием «This is Readme content.». В этом случае подготовка патча будет выглядеть следующим образом:

Сгенерированный файл-патч project-patch:

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

Откат патчей

Если по каким-то причинам патч оказался бесполезен и необходимо вернуться к предыдущей версии файлов (проекта), то можно сделать откат изменений, используя опцию -R:

При возникновении каких-либо ошибок во время применения патча, утилита patch создаёт файлы *.rej, по которым можно восстановить исходную версию файла. Однако, следует учитывать, что восстановление содержимого файлов таким способом — довольно долгое и нудное занятие. Практичнее создавать резервные копии файлов, указывая в команде patch опцию -b:

Заключение

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

Операционная система Debian – один из самых стабильных вариантов на рынке, но казусы случаются везде. Чтобы застраховать ПК или сервер от попадания вирусов, а также защититься от мошенников, необходимо своевременно устанавливать обновления.

Обновить Debian – задача не из сложных. Этот процесс обусловлен выполнением нескольких примитивных шагов.

Обновление Debian через терминал

Этот способ создан для тех, кто не любит возиться с техникой слишком долго, но и не пускает всё на самотек. Прежде чем обновлять систему, следует убедиться в том, что ваши репозитории находятся в полном порядке. К примеру, ранее вы подключили репозиторий testing для установки пакета, не выключив его по завершению процесса. В данном случае любые вмешательства могут вызвать еще больше проблем.

Откроем файл sources.list редактором nano, внимательно смотрим на список репозиториев.

$ sudo nano /etc/apt/sources.list

sources

Нормально: в нем наличествуют основные хранилища операционной системы (stretch), репозиторий стандартных обновлений, а также хранилище обновлений безопасности.

Плохо: в файле наличествуют testing, sid, back ports.

Установленные репозитории можно посмотреть и другим способом. Например, воспользовавшись дополнением «Программы и обновления».

Отключите галочки напротив тех репозиториев, которые помешают обновлению ОС. Их названия упоминались чуть выше.

sudo bash

По аналогии с убунту , астра линукс , списки пакетов обновляются по команде:

ВАЖНО! вместо apt-get можно использовать более новую команду apt, в некоторых случаях интерпретатор напишет ошибку, команда не найдена. Чтобы убрать ошибку, необходимо установить apt.

update

Для запуска обновления в терминале вводим:

Даем согласие на установку. Апгрейд пакетов Debian займет некоторое время. На сроки влияет производительность ПК и скорость Интернет-соединения. Если система обновлялась давно, на это потребуется больше времени.

Согласие на обновление

Обновление Дебиан в графическом интерфейсе

Данный способ обновления также не обойдется без графического дополнения «Программы и обновления». Осуществите проверку обновлений в одноименной вкладке, активируйте уведомление о найденных обновах.

Графическая утилита найдет возможные обновления и предложит их вам. Если вас устраивают автоматические обновления, воспользуйтесь данной опцией здесь же. Утилит начнет делать апгрейд ежедневно.

Чтобы установить обновления, также можно воспользоваться программой «Центр приложений» (открывается через главное меню). Далее перешагните в подраздел «Обновления».

Найдите на экране значок «Обновить», нажмите на него. Это позволит произвести обмен данными. После этого вам предстоит закончить установку выявленных обновлений.

Debian также обновляется при помощи установки популярного софта под названием « Synaptic ». Она не является базовой утилитой, однако ее можно установить.

Новый софт появится в меню устройства. ПО работает без перебоев, а потому пользуется большим спросом среди пользователей. Откройте Synaptic, кликните на кнопку «Обновить». Далее произойдет обмен данными между списками пакетов хранилищ.

Следующий шаг: кликните на кнопку «Отметить…». Актуальные апгрейды попадут в список необходимых установок. Программа выдаст запланированные модернизации.

Нажатие на клавишу «Применить» запустит процесс обновление. Не прерывайте его до полного завершения.

Заключение

Беспроблемная и безопасная работа компьютера возможна лишь при бережном обращении. С новой версией ОС устройство работает быстрее и без лагов. К тому же, это минимизирует вероятность попадания вирусов на ПК и сервер. Мошенникам будет сложнее взломать обновленную версию Debian, а значит, пользователь может не беспокоиться за сохранность и конфиденциальность личных данных.

Обновление операционной системы Debian осуществляется многообразными способами и неважно какая версия стоит 9, 8,7. Каждый пользователь может избрать для себя самый удобный и понятный вариант установки обновлений системы.

Favorite

Добавить в избранное

Главное меню » Linux » Как запустить команду patch в Linux

Как запустить команду patch в Linux

«diff» сокращенно обозначается «differences» и используется для сравнения содержимого двух файлов и перечисления изменений в стандартном выводе.

В этой статье показано, как использовать команду «diff» для создания файла исправления, а затем применить его с помощью команды «patch».

Синтаксис:

Синтаксис команды « patch » следующий:

Создание файла патча с помощью «diff»:

Файл исходного кода 1:

Во-первых, для создания файла исправления требуются две разные версии исходного кода. Созданный мной файл исходного кода называется «myfile.c»: s

Файл исходного кода 2:

Теперь скопируйте содержимое myfile.c в new_myfile.c, используя:

Внесите некоторые изменения во вновь созданный файл:

Проверка разницы:

Давайте создадим файл patch с именем myfile.patch:

Вы можете распечатать файл patch, выполнив команду ниже:

Применение файла исправления:

Чтобы применить patch, используйте:

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

Сделайте резервную копию перед установкой patch:

Используйте параметр «-b» для создания резервной копии файла исправления:

Установка версии файла резервной копии

Если вам нужно несколько резервных копий одного файла резервной копии, используйте параметр «-V». Он устанавливает номер версии каждого файла резервной копии. Выполните команду, указанную ниже:

Проверить файлы исправлений

Если вы хотите проверить или понаблюдать за результатом установки исправлений, используйте опцию «–dry-run». Он не вносит никаких изменений в исходный файл:

Читайте также: