Как обрабатывать файлы .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 — просто лежат там и ждут, чтобы мы с ними разобрались. Вот что мы можем делать дальше.
Самое простое и очевидное, что можно сделать — о чём вы, вероятно, уже подумали, — это просто скопировать (или переместить) файл .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Для ясности, это обработает все файлы .pacnew, которые оно найдёт, по одному. К сожалению, сам pacdiff не принимает аргумент имени файла. Главное здесь — это доступные вам опции:
- (П)росмотр: Открывает побочное сравнение вашего текущего файла и версии
.pacnew. - (С)лить: Пытается интерактивно объединить файл
.pacnewс существующим файлом. - (П)ропустить: Игнорирует этот файл на данный момент и переходит к следующему.
- Удалить pacnew: Удаляет файл
.pacnew, не затрагивая вашу текущую конфигурацию. - Перезаписать с pacnew: Заменяет ваш существующий файл конфигурации версией
.pacnew. - (В)ыйти: Немедленно выходит из
pacdiff, не обрабатывая остальные файлы.
Следующий шаг, конечно, — это просмотреть различия. Нажмите «v», затем «Enter», и вас перенесет на следующий экран vimdiff, показывающий первый файл, который нашел pacdiff — в этом примере /etc/hosts.
Главное, что нужно запомнить, так как это является основой для того, что мы будем делать дальше: левая панель отображает файл .pacnew, а правая панель показывает ваш текущий оригинальный файл, который система фактически использует.
Здесь вы можете перемещать изменения между двумя сравниваемыми файлами с помощью мощных команд diff, dp и do.
dp: Копирует (вставляет) разницу из текущего файла в другой. Думайте: «Я хочу перенести это изменение туда.»do: Копирует (получает) различие из другого файла в текущий. Подумайте: «Я хочу взять это изменение и перенести его сюда.»
Просто переместите курсор на строку, которая отличается, и введите одну из двух команд выше, чтобы внести необходимые изменения. Когда закончите, введите команду Vim :wqa (w — записать, q — выйти, a — всё) и нажмите «Enter» — это вернёт вас на главный экран.
Поскольку мы уже применили все наши изменения, безопасно удалить файл .pacnew, набрав r и нажать «Enter». Файл будет удалён, и pacdiff автоматически перейдёт к следующему файлу, где вас снова спросят, что вы хотите сделать дальше.
Как видите, вы можете пропустить всё это, просто объединив или напрямую перезаписав файл, но я крайне не рекомендую этого делать. Наиболее безопасный (и профессиональный) подход — просмотреть каждое изменение самостоятельно и решить, как вы хотите с ним поступить.
И наконец, небольшое замечание: когда вы находитесь в режиме сравнения (vimdiff), вы можете переключаться между панелями, нажав Ctrl + W, а затем используя клавишу со стрелкой влево или вправо, чтобы переместить курсор на нужную панель.
Итог
Управление файлами .pacnew — это просто часть поддержания здоровой и предсказуемой системы Arch Linux. Как вы уже узнали, эти файлы появляются, чтобы защитить ваши пользовательские настройки от перезаписи, но они также сигнализируют о том, что что-то изменилось на стороне upstream. Вам решать, как именно эти изменения должны быть интегрированы.
Для получения дополнительной информации я также рекомендую обратиться к Arch Wiki.
Спасибо за ваше время! Надеюсь, мои советы вам окажутся полезными. Как всегда, буду очень признателен за любые отзывы.





