Каталог установки во время выполнения содержимого пакета debian - PullRequest
1 голос
/ 19 января 2012

У меня есть пакет debian, который я создал, который содержит tar-архив файлов, контрольный файл и файл postinst. Он построен с использованием dpkg-deb и правильно устанавливается с использованием dpkg.

Модификация, которую я хотел бы сделать, состоит в том, чтобы каталог установки файлов определялся во время выполнения на основе переменной среды, которая будет установлена ​​при запуске dpkg -i в файле deb. Я отображаю переменную окружения в скрипте postinst и вижу, что она установлена ​​правильно.

Мои вопросы:

1) Можно ли динамически определять каталог установки во время выполнения?

2) Если это возможно, как бы я поступил? Я прочитал о файле правил и файлах mypackage.install, но я не знаю, позволит ли мне что-либо из этого сделать.

Я мог бы взломать его, скопировав файлы в целевое местоположение в скрипте posinst, но я бы предпочел сделать это правильно, если это возможно.

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 28 января 2012

Так вот, что я узнал об этой проблеме за последние пару недель.

С предварительно упакованными двоичными файлами вы не можете собрать пакет debian с динамическим каталогом назначения, определенным во время выполнения.Я считаю, что это может быть возможно при установке пакета, созданного из исходного кода, где вы можете установить каталог установки с помощью configure.Но в данном случае, так как это встроенные машины Ubuntu, их не было, поэтому я не стал использовать такую ​​возможность.Я разработал нетрадиционный метод (взломать) для установки, которая работала.Так как пакеты debian просто содержат tar-шар относительно / просто создайте ваш пакет относительно каталога в / tmp.В сценарии postinst вы можете определить, куда копировать файлы из архива в постоянное местоположение.

Я ожидал, что после перезагрузки и автоматического удаления подкаталога в / tmp этот dpkg может не знать, что файлпакет существовал.Это не было проблемой.Когда я запустил 'dpkg -l myapp', он показал, что все еще установлен.Обновление пакета с использованием dpkg / apt-get также работает без проблем.

Я обнаружил, что если вы попытаетесь удалить пакет с помощью 'dpkg -r myapp', то dpkg попытается удалить / tmp, которыйне было хорошоОднако / tmp не так легко удалить, поэтому он никогда не удался.Кроме того, в нашей ситуации мы никогда не удаляем пакеты, а просто обновляем их.

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

Я попытался использовать --instdir, чтобы изменить каталог установки пакета, и он действительно переместил файлы, но dpkg не удалось, так как файл dpkg не может быть найден относительно нового instdir.Использование --instdir похоже на chroot.Я также пробовал --admindir и --root в различных комбинациях, чтобы посмотреть, смогу ли я использовать систему dpkg относительно / но install переместить файлы, но они не сработали.Я предполагаю, что rpm имеет опцию перемещения, которая работает, но не Ubuntu.

0 голосов
/ 25 апреля 2016

Почему бы не установить в стандартное местоположение, а просто использовать скрипт postinst для создания символических ссылок на нужное место?Это намного чище и не должно ничего ломать в dpk -I.

0 голосов
/ 09 мая 2013

Вы также можете написать скрипт, который 6 раз запускает dpkg-deb в другой среде, генерируя 6 разных пакетов.Когда вы вносите изменения, вам просто нужно запустить ваш скрипт, и все 6 пакетов будут сгенерированы, и вы сможете установить их на своих компьютерах, избегая пост-хакерских взломов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...