LINUX.ORG.RU

Проблема с deb пакетом /opt

 ,


0

1

Всем привет.

Создаю пакет deb. Создал для этого папку и внутри нее /opt/myapp.

Все нормально ставится и работает, но при удалении пакета удаляется папка /opt

Почему так происходить может? Я скриптами deb пакета ничего не трогаю.

Спасибо

Установленный пакет создаёт её, удаляемый удаляет, если других пакетов с /opt в системе нет. Насчёт того, что создавал ты её не установщиком пакета а вручную - не уверен, что это как-то учитывается, вполне возможно что пустая считается ненужной.

В /var/lib/dpkg/info/имя_пакета.list перечисляется всё что подлежит удалению вместе с пакетом. У стандартных пакетов вижу там в том числе /usr, так что было оно до установки или нет - и правда не запоминается, просто удаляется если больше внутри ничего нет. Создай там файл do_not_delete.txt и не будет удаляться.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)

Команды создания пакета, я надеюсь, ты не от рута запускаешь?

Нет, к вопросу это прямого отношения, скорее всего, не имеет. :)

hobbit ★★★★★
()
Ответ на: комментарий от firkax

о интересно. Не знал такого про /var/lib/dpkg/info/имя_пакета.list. Спасибо.

Проверил google chrome. Установился в чистую папку /opt и после удаления снес мне каталог /opt

Странно как-то это…

Делаю пакет: fakeroot dpkg-deb –build

skilful
() автор топика
Последнее исправление: skilful (всего исправлений: 1)

Правильного решения не знаю, но

В DEBIAN/postinst добавь touch /opt/empty; Тогда при удалении будет писать

Следующие пакеты будут УДАЛЕНЫ:
  appname-1.0.0*
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 1 пакетов, и 749 пакетов не обновлено.
После данной операции объём занятого дискового пространства уменьшится на 17,6 MB.
Хотите продолжить? [Д/н] 
(Чтение базы данных … на данный момент установлено 340424 файла и каталога.)
Удаляется appname-1.0.0 (1.0.0-1) …
(Чтение базы данных … на данный момент установлено 340422 файла и каталога.)
Вычищаются файлы настройки пакета appname-1.0.0 (1.0.0-1) …
dpkg: предупреждение: при удалении appname-1.0.0 каталог «/opt» не пуст, поэтому не
 удалён

Или в DEBIAN/postrm добавь mkdir -p /opt тогда после удаления пакета /opt будет восстановлен.

Суть в том что идёт попытка удалить всё что в tar, смотря как ты собираешь пакет, на крайняк можно написать скрипт который убирает из описания tar каталог /opt но в этом случае если этого каталога не будет установка будет неудаяна (кажись).

Короче по умолчанию если в катaлоге после удаления ничего нет, значит его не использует никакая программа, значит он летит в топку, всё. Если каталог какой то будет нужен он будет всегда создан. (но если ты пропатчишь деб пакет убрав и tar пути то ты это сломаешь)

Сам руками просто сделай sudo touch /opt/do_not_remove_me и всё. Теперь этот файл вне системы dpkg и каталог opt не будет тронут.

А так, если ты снова установишь свой пакет. То каталог /opt появится снова. Даже если у тебя его не будет как и любого другого предназначенного для установки, он будет создан автоматически согласно путям заданным в пакете, а пути там абсолютные и все.

Так что если тебе снесло opt или /usr/local/games значит они ненужны, а как только станут нужны при установке пакета туда они будут созданы.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от skilful

Ну вот, проблема одна и также, решения тоже. Повторюсь то что каталог opt снесло это не повлияет на то если другое приложение захочет туда установится. Если ты удалишь все программы лежашие в /usr/bin то останется только /usr/ другие каталоги в нём, а bin будет удалена ибо нет программ нуждающихся в нём. Типа того.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

)))))

но все равно как-то не очень приятно это лишаться каталога такого )) хотя я так понял согласно стандарту /opt должен быть и у меня как бы не эмбедид, а настолка

https://refspecs.linuxfoundation.org/FHS_2.3/fhs-2.3.pdf https://en.wikipedia.org/wiki/Unix_filesystem#Conventional_directory_layout

skilful
() автор топика
Ответ на: комментарий от skilful

В opt логично что-то просто распаковывать в каталог app_name в обход пакетного менеджера, устанавливать свои пакеты через пакетный менеджер лучше в /usr/local/bin/ на то он и local но нужно придерживаться всех правил и распихивать всё туда куда полагается, исполняемое в бин, доки,картинки и всякое разное в /usr/local/share и так далее.

Ладн, чво надо уже знаешь, а уже что делать решать тебе =)

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Да спасибо.

Но мне не понятно как правильно вообще создавать пакет по стандарту что ли.

Вроде бы надо пользоваться debhelper и потом с помощью rules описывать что и куда должно копироваться.

Но с другой стороны часто я использую способ, который чаще всего по всем сайтам гуляет: создать директорию DEBIAN/control, положить рядом с ней каталоги с файлами, согласно тому как они затем будут лежать в конечной системе.

Или debhelper и создаваемый debian/rules нужен для пакетов из исходников компилируемых только?

Посмотрел на пакет google-chrome вроде по второму способу собран. Да и lintian в нем ошибки находит. Может я что-то не так делаю, конечно

skilful
() автор топика
Ответ на: комментарий от skilful

Да как тебе удобно так и делай, сделай шаблон, типа (пример похож тут на твой случай)

dron@gnu:~/dev/lala$ tree ./appname_1.0.0-0_amd64
./appname_1.0.0-0_amd64
├── DEBIAN
│   ├── compat
│   ├── control
│   ├── md5sums
│   ├── postinst
│   ├── postrm
│   ├── preinst
│   └── prerm
└── opt
    └── myapp
        └── lala.sh

3 directories, 8 files
dron@gnu:~/dev/lala$

И выполни dpkg-deb --build ./appname_1.0.0-0_amd64 всё.

И всё, накидывай фалы внутрь, с путями конечно, и всё. Можно скрипт какой сделать, где указать каталог что упаковать, какая у этого версия, а скрипт уже сгенерирует пакет как надо сам.

А так

LINUX-ORG-RU ★★★★★
()