Создание спецфайла
С этой точки зрения, как создатель пакета, вы можете помечать файлы как конфигурации. У Джона Уорбрика из Кембриджского университета есть хороший обзор различных маркировок файлов. которые можно использовать в спецификации RPM, и как они ведут себя во время обновления.
Файлы с пометкой %config
, если они были изменены, это:
- оставлен после удаления, но переименован с расширением
.rpmsave
- не изменяется при обновлении или переустановке, но копия полезной нагрузки устанавливается с расширением
.rpmnew
Warbrick не занимается прямым удалением пакетов: если файл с пометкой %config
неизменен, при удалении пакета этот файл будет удален. (Помните, что согласно порядку скриптлетов RPM, RPM update em> или переустановка начинается со стирания старого пакета до того, как будут установлены новые файлы. То есть старая неизмененная конфигурация заменяется новой конфигурацией.)
Было бы злоупотреблением классификацией файлов RPM пометить что-то %config
, что на самом деле не является конфигурацией. Это важно, потому что системные администраторы должны иметь возможность доверять полезной нагрузке пакета. Кроме того, вы, вероятно, не хотите, чтобы такой файл был переименован с расширением.
Ваша лучшая надежда — создать файл во время RPM %post. Файлы, скопированные в файловую систему в %install
, проверяются по списку %files
и сохраняются в базе данных RPM, но файлы, созданные в %post
, не проверяются. Опять же, это злоупотребление форматом файла спецификации RPM, но если вы упомянете об этом в %description
и любой другой документации, особенно если это логически ожидаемое поведение в контексте вашего пакета, вы < em>может быть получить некоторое сочувствие.
Существующие пакеты
Для системных администраторов, желающих удалить пакет, не удаляя его полезную нагрузку, вы используете rpm --justdb
. Сначала проверьте список файлов:
# rpm -ql $PACKAGE | tee $PACKAGE.payload
[rpm returns list of files, tee saves it in the file $PACKAGE.payload]
# rpm -e --justdb $PACKAGE
(На этом этапе вы можете получить жалобу на отказ, поэтому повторите с --nodeps
, если необходимо.)
И, наконец, проверьте, что пакет пропал, но полезная нагрузка осталась:
# rpm -q $PACKAGE
package $PACKAGE is not installed
# ls -l $(<$PACKAGE.payload)
[ls queries list of files saved in $PACKAGE.payload]
(Или для более надежного ls
, если имена файлов содержат пробелы, что было бы недобросовестно в RPM.)
# cat $PACKAGE.payload|xargs -d '\n' ls -l
Другие наблюдения
Обратите внимание, что для пакета, созданного с использованием метода, описанного в верхней части моего ответа, попытка перечислить файлы, которыми он владеет, с помощью rpm -ql $PACKAGE
не покажет эти постоянные файлы. Еще одним последствием сброса файлов во время %post
является то, что другой пакет, который "владеет" этими файлами, может неожиданно перезаписать их - они не указаны в базе данных RPM, поэтому они не защищены.
Два метода, которые я описал, нарушают лучшие практики как для создания пакетов RPM, так и для системного администратора. Пожалуйста, будьте очень осторожны при использовании этого опасного "небольшого знания". Может быть, есть что-то еще, что вы могли бы сделать, чтобы создать желаемую ситуацию.
(Наконец-то я знаю, что это вопрос четырехлетней давности. На него не было ответа. Он требовал ответа. Ура.)
person
Rich
schedule
12.05.2016
rpm -i package.rpm
, это, по сути, «извлекает» содержимое пакета в нужные места в вашей системе. Самpackage.rpm
остается на месте. Когда вы делаетеrpm -e package
(неpackage.rpm
), это, по сути, «удаляет» то, что было извлечено ранее. Файл пакета остается нетронутым. - person ArjunShankar   schedule 03.05.2012rpm -e
? Когда я запускаюrpm -e
, я хочу удалить файлы. Вы бы нарушили «принцип наименьшего удивления», если бы ваши обороты были в чем-то особенными. Например, системные администраторы были бы очень раздражены этим. - person ArjunShankar   schedule 03.05.2012rpm -e
для удаления вашего пакета в системе, где он установлен, вы не хотите удалять файлы, но вы хотите, чтобы пакет для удаления из системного списка установленных пакетов. Если это так, я думаю, вам следует специально отредактировать и упомянуть об этом в своем вопросе. Там непонятно. Во всяком случае, как я уже сказал, звучит как плохая идея для меня (если это вообще возможно) - person ArjunShankar   schedule 03.05.2012