Команда, убирающая уведомление о подписке: самая распространённая однострочная, самый тихий вред
Первое, с чем сталкиваются все после установки, это уведомление о подписке, и первое решение, которое все находят, это команда в одну строку. Распространённый вариант этой команды измерен: он может сломать всю библиотеку интерфейса.
AtlasPVE ·
Эта статья отвечает на
- proxmox убрать уведомление о подписке
- proxmox no valid subscription
- proxmox post install script
- что делать после установки proxmox
- proxmox убрать nag
Вы установили Proxmox, вошли, и появилось уведомление о подписке. Оно раздражает, потому что возвращается при каждом входе. Вы ищете и находите команду в одну строку. Кажется, она работает.
Эта статья о той команде, но её настоящая тема не команда: тихая цена вставки того, чего вы не понимаете.
Измеренная ошибка
Внутри широко разошедшейся однострочной команды есть настоящий изъян, и изъян тонкий.
В базовых регулярных выражениях классических текстовых инструментов вертикальная черта, написанная с обратной косой, не обычный символ, а оператор альтернативы. Условие в коде интерфейса содержит две вертикальные черты, и когда команда экранирует их как есть, между двумя операторами альтернативы возникает пустая альтернатива.
Пустая альтернатива совпадает в каждой позиции файла. Запущенное вместе с «заменить всё», выражение рассыпает изменение по всему файлу.
Это не догадка. Это измерено на копии настоящего файла: изменились 26458 строк из 26458, а количество false в файле выросло с 558 до 26458. Администратор, запустивший ту команду, сломал бы всю библиотеку интерфейса Proxmox.
Сверху есть и вторая беда: искомое условие не помещается в одну строку, Proxmox растягивает его на шесть. Инструмент, работающий построчно, всё равно никогда не смог бы попасть в него правильно.
Почему никто не заметил
Потому что вред тихий. Команда не выдаёт ошибку, ничего не загорается красным. Интерфейс может продолжать работать какое-то время, беда всплывает позже, и в тот миг никто не связывает её с «командой, которую я вставил на прошлой неделе».
Общий урок отсюда: «у всех работает», это не доказательство. Чаще всего это лишь доказательство того, что никто не смотрел.
Четыре правила для любого изменения такого рода
Любая операция, которая трогает системный файл, кто бы её ни выполнял, должна нести эти четыре.
Резервная копия делается один раз и никогда не перезаписывается. Обновлять её при каждом запуске значит на втором запуске сохранить сломанное состояние.
Прицел узкий. Если целевой текст действительно изменился, операция не выполняется. Менять наугад ближайшее хуже, чем не менять ничего.
После записи файл перечитывается. Если ожидаемый результат не появился, копия восстанавливается. То, что запись не дала ошибки, не значит, что она записала правильное.
Оставляется метка. На вопрос «изменён ли этот файл» должно отвечать наличие метки, а не догадка.
Случай, о котором никто не думает: а если копия уже сломана
Даже выполнив все четыре, остаётся брешь. А если другой инструмент сломал файл раньше, а вы сделали копию после?
Тогда откат вернёт сломанный файл, и вы будете думать, что починили. Именно поэтому откат тоже надо проверять: действительно ли вернулся оригинал, или сама копия уже была изменена?
Это пример вопроса, который надо задавать постоянно, работая с уже установленной машиной: не что происходит на чистой установке, а что происходит на машине, несущей старое состояние.
Что делает Atlas
Atlas выполняет эту работу внутри продукта, а не вставкой команды, и применяет все четыре пункта выше.
Копия делается один раз и не перезаписывается. Прицел узкий: образец, снисходительный к пробелам, но дословный в остальном, поэтому он продолжает срабатывать, если Proxmox изменит оформление, но если изменилось само условие, не делается ничего. После записи файл перечитывается и проверяется; если ожидаемый результат не появился, копия восстанавливается. А вставляемый текст несёт метку, так что на вопрос «изменён ли» отвечают с уверенностью.
Со стороны отката обработан и последний случай: после восстановления копии проверяется, действительно ли вернулся оригинал, и если нет, об этом говорится прямо.
Единственная фраза, которую эта статья действительно хочет сказать, такова: работа несложная, но разница между сделать правильно и выглядеть работающим проходит через измерение.
Источники
Собственная документация Proxmox. На английском, и последнее слово в этом вопросе за ней.