У меня есть пакет debian, который устанавливает файл в /usr/local/java/jre/lib/ext
, где /usr/local/java
это символическая ссылка на место, где фактически установлен jvm, в данном случае /usr/lib/jvm/java-6-sun
.
Новая версия этого пакета устанавливает jar в другом месте. Проблема в том, что установка новой версии заставляет dpkg пытаться привести себя в порядок, в конечном итоге удаляя /usr/local/java
символическая ссылка.
Это крайне нежелательное состояние, даже временно.
Мне не удалось найти флаг для dpkg, который убедит его оставить символическую ссылку на месте, и, похоже, невозможно установить неизменяемый бит для символических ссылок.
Вот изменения в конфигурации упаковки debian:
diff --git a/debian/dirs b/debian/dirs
--- a/debian/dirs
+++ b/debian/dirs
@@ -1 +1 @@
-usr/local/java/jre/lib/ext
+usr/share/java
diff --git a/debian/rules b/debian/rules
--- a/debian/rules
+++ b/debian/rules
@@ -30,7 +30,7 @@ install: build
# Add here commands to install the package into debian/tmp.
# $(MAKE) pure_install
- cp thejar.jar $(TMP)/usr/local/java/jre/lib/ext
+ cp thejar.jar $(TMP)/usr/share/java
# Build architecture-independent files here.
binary-indep: build install
Я представляю, что ухожу usr/local/java/jre/lib/ext
в dirs
дало бы желаемый эффект, но это просто решает проблему в будущем - я бы предпочел, чтобы этот пакет не отвечал за поддержку символической ссылки.
Итак: какие у меня варианты?
Символьные ссылки - это просто файлы, устанавливаемые пакетом, поэтому применяется нормальное поведение. Я могу думать о следующих вариантах:
Обратите внимание, что все, на что указывает символическая ссылка, будет удалено при удалении старой версии, поэтому я не вижу, как это улучшить.
Если у вас dpkg> 1.15.8, попробуйте заполнить /etc/dpkg/dpkg.cfg.d/excludes
с участием:
path-exclude=/usr/local/java/jre/lib/ext
Источник: Экономьте место на диске, исключая ненужные файлы с помощью dpkg | Рафаэль Герцог.
Для пользователей Arch используйте NoExtract = в /etc/pacman.conf и исключите ведущую косую черту из пути. Видеть ArchWiki или man pacman.conf
.