Поиск по сайту:

Как обрабатывать файлы .pacnew в Arch Linux


Поймите, как Arch Linux создаёт файлы .pacnew во время обновлений и как управлять изменениями конфигурации, не нарушая вашу систему.

Если вы используете Arch Linux, вы, вероятно, заметили, что через некоторое время, особенно после обновлений системы, в вашей системе начинают появляться файлы с расширением .pacnew. И раз вы это читаете, вероятно, именно это привело вас сюда: чтобы понять, что это за файлы, почему они появляются и что с ними делать.

Ну что ж, вы обратились по адресу. В следующих строках я постараюсь объяснить всё ясно и просто. Итак, начнём с главного вопроса.

Что такое файлы .pacnew в Arch Linux?

Когда вы обновляете вашу систему Arch Linux, используя что-то вроде pacman -Syu, некоторые уже установленные пакеты могут содержать конфигурационные файлы, обычно хранящиеся в /etc. Однако если вы изменили один из этих файлов, а мейнтейнер пакета внес изменения в обновлённой версии, Arch (разумеется) не перезапишет вашу локально установленную версию.

Это мера безопасности, которая предотвращает потерю ваших локальных изменений. На самом деле, под капотом, Pacman создаёт файл .pacnew — «новую» версию конфигурационного файла, поставляемого с обновлённым пакетом, предоставляя вам доступ к обновлённой конфигурации, которую теперь предлагает пакет. Думайте об этом так:

  • Ваша текущая конфигурация=ваши пользовательские настройки.
  • Файл .pacnew=обновлённая версия от разработчика.

Например, если файл /etc/pacman.conf был изменён на исходной системе, после обновления вы увидите /etc/pacman.conf.pacnew. Вы можете открыть оба файла рядом (подробнее об этом ниже) и скопировать важные изменения.

Затем, как только вы объединили или заменили файл, вы можете безопасно удалить версию .pacnew, чтобы всё оставалось аккуратно. Основная цель — поддерживать конфигурацию вашей системы в актуальном состоянии без потери ваших индивидуальных настроек. А если вы уже задумались, как выполнить само слияние, читайте дальше. На самом деле это довольно простая задача.

Как сравнивать и объединять файлы .pacnew в Arch Linux

Теперь, когда мы изучили теорию, пора перейти к практике. Первый шаг, как и следовало ожидать, — проверить, какие файлы .pacnew присутствуют в нашей системе Arch. Для этого Arch предоставляет удобный инструмент под названием pacdiff, который сам находит их за вас.

Однако он не включён по умолчанию — он является частью пакета pacman-contrib, так что начнём с его установки.

sudo pacman -S pacman-contrib

Довольно просто, правда? Теперь, когда у нас готов pacdiff, давайте посмотрим на все файлы .pacnew, доступные в нашей системе Arch.

pacdiff -o

Список файлов .pacnew в системе Arch Linux.

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

Самое простое и очевидное, что можно сделать — о чём вы, вероятно, уже подумали, — это просто скопировать (или переместить) файл .pacnew поверх оригинального. Что-то вроде:

cp /etc/example.conf.pacnew /etc/example.conf

Затем вы можете удалить файл .pacnew и продолжить. Конечно, в некоторых случаях это может сработать, но в целом это не лучшая идея, и я настоятельно не рекомендую этого делать.

Вот почему: во-первых, это полностью оставляет вас в неведении о том, что реально изменилось в новой версии. Вы просто слепо доверяете, что это ничего не сломает. Во-вторых, такой подход работает — и я имею в виду только — если вы абсолютно уверены, что ранее сами не изменяли этот файл, потому что в противном случае вы потеряете все свои ценные ручные изменения.

Но самое главное — вы пользователь Arch (кстати). Это значит, что вы, как предполагается, должны быть невосприимчивы к обычным проблемам, которые командная строка вызывает (к сожалению) у некоторых пользователей. Поэтому вместо того чтобы искать короткие пути, я предлагаю следовать правильной, последовательной процедуре работы с файлами .pacnew, которую я сразу же вам покажу.

Чтобы сравнить различия между вашим оригинальным файлом и его версией .pacnew — а также объединить любые изменения — вы можете использовать удобный инструмент vimdiff, который входит в пакет vim. Если он ещё не установлен, просто выполните:

sudo pacman -S vim

Я уверен, что многие уже готовы пожаловаться, так почему бы не упростить задачу и не воспользоваться одним из множества GUI-приложений, доступных для этой цели? Причина проста — они обычно подключают кучу дополнительных зависимостей, таких как Qt или GTK, в зависимости от вашей десктопной среды, что не всегда удобно. Я предпочитаю универсальное решение, и для этой задачи идеально подходит терминальное vimdiff.

Итак, выполните следующее, и pacdiff по умолчанию вызовет vimdiff:

sudo pacdiff

Мы будем использовать vimdiff для сравнения и слияния различий между файлами.

Для ясности, это обработает все файлы .pacnew, которые оно найдёт, по одному. К сожалению, сам pacdiff не принимает аргумент имени файла. Главное здесь — это доступные вам опции:

  • (П)росмотр: Открывает побочное сравнение вашего текущего файла и версии .pacnew.
  • (С)лить: Пытается интерактивно объединить файл .pacnew с существующим файлом.
  • (П)ропустить: Игнорирует этот файл на данный момент и переходит к следующему.
  • Удалить pacnew: Удаляет файл .pacnew, не затрагивая вашу текущую конфигурацию.
  • Перезаписать с pacnew: Заменяет ваш существующий файл конфигурации версией .pacnew.
  • (В)ыйти: Немедленно выходит из pacdiff, не обрабатывая остальные файлы.

Следующий шаг, конечно, — это просмотреть различия. Нажмите «v», затем «Enter», и вас перенесет на следующий экран vimdiff, показывающий первый файл, который нашел pacdiff — в этом примере /etc/hosts.

Просмотр различий с помощью vimdiff.

Главное, что нужно запомнить, так как это является основой для того, что мы будем делать дальше: левая панель отображает файл .pacnew, а правая панель показывает ваш текущий оригинальный файл, который система фактически использует.

Здесь вы можете перемещать изменения между двумя сравниваемыми файлами с помощью мощных команд diff, dp и do.

  • dp: Копирует (вставляет) разницу из текущего файла в другой. Думайте: «Я хочу перенести это изменение туда.»
  • do: Копирует (получает) различие из другого файла в текущий. Подумайте: «Я хочу взять это изменение и перенести его сюда.»

Просто переместите курсор на строку, которая отличается, и введите одну из двух команд выше, чтобы внести необходимые изменения. Когда закончите, введите команду Vim :wqa (w — записать, q — выйти, a — всё) и нажмите «Enter» — это вернёт вас на главный экран.

Сохранить все изменения и выйти.

Поскольку мы уже применили все наши изменения, безопасно удалить файл .pacnew, набрав r и нажать «Enter». Файл будет удалён, и pacdiff автоматически перейдёт к следующему файлу, где вас снова спросят, что вы хотите сделать дальше.

Удалите файл .pacnew и переходите к следующему.

Как видите, вы можете пропустить всё это, просто объединив или напрямую перезаписав файл, но я крайне не рекомендую этого делать. Наиболее безопасный (и профессиональный) подход — просмотреть каждое изменение самостоятельно и решить, как вы хотите с ним поступить.

И наконец, небольшое замечание: когда вы находитесь в режиме сравнения (vimdiff), вы можете переключаться между панелями, нажав Ctrl + W, а затем используя клавишу со стрелкой влево или вправо, чтобы переместить курсор на нужную панель.

Итог

Управление файлами .pacnew — это просто часть поддержания здоровой и предсказуемой системы Arch Linux. Как вы уже узнали, эти файлы появляются, чтобы защитить ваши пользовательские настройки от перезаписи, но они также сигнализируют о том, что что-то изменилось на стороне upstream. Вам решать, как именно эти изменения должны быть интегрированы.

Для получения дополнительной информации я также рекомендую обратиться к Arch Wiki.

Спасибо за ваше время! Надеюсь, мои советы вам окажутся полезными. Как всегда, буду очень признателен за любые отзывы.