Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как отвязать файл принадлежащий пакету  (Прочитано 2553 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kmk

  • Автор темы
  • Активист
  • *
  • Сообщений: 664
    • Просмотр профиля
Понадобилось собрать простой deb-пакет со скриптом, который копирует файлы по нужным папкам. (Делал это с помощью sudo checkinstall -D --install=no) Такое делал не раз, и проблем не было. Правда, файлы никак не касались других пакетов.

В этот раз, при установке (dpkg -i file.deb), пакетный менеджер ругается, что такой файл "уже имеется в пакете" (привязан к другому пакету). Как в этой теме, только у меня простой текстовый файл, а не библиотека, как у топикстартера. Я делаю локализацию к программе, и один из ее текстовых файлов нужно заменить.

Вопрос без труда можно решить, указав dpkg принудительно перезаписывать файлы, с помощью опции "--force-overwrite":
sudo dpkg --force-overwrite -i file.deb

Теперь файл становится привязан к новому пакету, и отвязан от предыдущего.

Было бы идеально, чтобы перед копированием, файл отвязывался от старого пакета, и можно было бы без каких-либо ошибок, или дополнительных опций, установить новый пакет, простой привычной всем командой:
dpkg -i file.deb

(Нажмите, чтобы показать/скрыть)

Но нигде не могу найти, как это сделать.

Кто решал этот вопрос подскажите, возможно ли это?

Оффлайн БТР

  • Заслуженный пользователь
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6287
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #1 : 07 Ноября 2024, 12:55:50 »
Попробуйте dpkg-divert в скрипте preinstall.

Оффлайн kmk

  • Автор темы
  • Активист
  • *
  • Сообщений: 664
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #2 : 07 Ноября 2024, 20:26:40 »
dpkg-divert
Спасибо, похоже на то, что мне нужно, но что-то не получается с ним разобраться. Подробных русских мануалов не нашел, а в англоязычных тоже не очень-то разжевано. Более-менее подробно здесь (link1, link2), но всеравно запутался, и ничего не получилось.

Нужно, переписать обычный текстовый файл в /opt/programname/share/doc/programname/translators.txt Он принадлежит пакету этой самой программы, и когда я с помощью dpkg -i запускаю установку своего русификатора, свежесобранного deb-пакета , вылезает вышеописанная ошибка.

Если есть опыт работы с dpkg-divert, подскажите как правильно прописать.

Можно конечно скопировать и простым скриптом, который раскидает все по своим местам, но хочется, чтобы было красиво - с помощью deb-пакета. rpm-пакет тоже по-хорошему нужен, так что привязка к dpkg не совсем правильная, не универсальная.

Пользователь добавил сообщение 08 Ноября 2024, 09:39:08:
привязка к dpkg не совсем правильная, не универсальная.

Вчера перед сном, почти как периодическая таблица Менделееву, пришла простая, но гениальная идея. Не переписывать этот файл, а передать нужные строки в этот файл, с помощью echo и tee. Добавил в make-файл вместо копирования:
echo -e "string1\nstring2\nstring3\n" | sudo tee /path to file/file.txt

И все получилось как надо. Никаких ошибок при установке, файл заменен, но остался принадлежать программе, а не русификатору!

Однако, все же, нашел одну небольшую ошибку. Echo засунул в файл в начале первой строки " -e".

Можно ли его убрать из команды, это ведь, насколько я понимаю, интерпретация обратного слеша (\n), и будет ли он без этого переносить строки?

Пользователь добавил сообщение 08 Ноября 2024, 12:18:46:
Echo засунул в файл в начале первой строки " -e".

Можно ли его убрать из команды
Просто попробовал убрать " -e" после echo, и все отработало успешно. Хоть установка идет из-под sudo (sudo dpkg -i file.deb), всеравно sudo перед tee обязательно нужно. Иначе опять начинает ругаться на принадлежность к пакету.
« Последнее редактирование: 08 Ноября 2024, 12:18:46 от kmk »

Оффлайн Skif_off

  • Активист
  • *
  • Сообщений: 416
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #3 : 10 Ноября 2024, 05:12:25 »
kmk, после такого номера пакет обновится корректно? Контрольные суммы файлов пакета сохраняются, не оставит ли dpkg при обновлении/удалении файл file.txt нетронутым?

Многострочный текст не практичнее "пульнуть" с чем-то типа "cat << EOF"? (Видел в скриптах, но как работает с разбегу не понял.) Из-за трёх-то строк, наверное, париться с обновлением смысла не особо...

Оффлайн kmk

  • Автор темы
  • Активист
  • *
  • Сообщений: 664
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #4 : 10 Ноября 2024, 18:35:56 »
Просто попробовал убрать " -e" после echo, и все отработало успешно.
Оказалось, что нет. При сборке deb-пакета, checkinstall перезаписывает файл как нужно, хотя никто его об этом не просил, поэтому создалась иллюзия нормальной работы. На самом деле, при установке из deb-пакета, файл не изменяется. Ломаю голову, как можно простыми стандартными утилитами это дело провернуть.

после такого номера пакет обновится корректно? Контрольные суммы файлов пакета сохраняются, не оставит ли dpkg при обновлении/удалении файл file.txt нетронутым?
Программа обновится, т.к. файл остается принадлежать ее пакету. Т.е. видит его как родной. Насчет контрольных сумм не знаю, проверяются ли они.
При обновлении файл однозначно перезапишется. Но  это не так важно. Дело в том, что в репозиториях есть только древняя версия. А установив с офсайта, всеравно будет нужно обновляться вручную.

Многострочный текст не практичнее "пульнуть" с чем-то типа "cat << EOF"?
Там не три строчки, а большой список переводчиков из разных стран.

cat << EOF
пробовал, словил кучу ошибок "Makefile:12: *** пропущен разделитель.  Останов.". Перепробовал несколько вариантов, вставлял "   > " (табуляция, стрелка, пробел) перед каждой строкой, тоже выдает ошибки.
и
cat file1.txt > file2.txt
"попытка перезаписать ***.txt, который уже имеется в пакете ***"
и
cp file1.txt file2.txt
(то же самое, см.первый пост.)

все простое перепробовал...

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

P.S. Самое обидное, что при вводе команд в консоли, они все отрабатывают корректно, а через make-файл, все не работают. Точнее, те файлы, которые не касаются пакета, отрабатывают нормально, а этот злосчастный список, принадлежащий пакету программы, нет.

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7804
  • We were here
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #5 : 10 Ноября 2024, 18:55:23 »
Echo засунул в файл в начале первой строки " -e".
Чем помешала опция?

Просто попробовал убрать " -e" после echo, и все отработало успешно.
Хы.
(Нажмите, чтобы показать/скрыть)

🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн kmk

  • Автор темы
  • Активист
  • *
  • Сообщений: 664
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #6 : 10 Ноября 2024, 22:29:47 »
Чем помешала опция?
Просто попробовал, потому, что:
Echo засунул в файл в начале первой строки " -e".

$: which echo
Спасибо. Попробовал вписать полные пути к утилитам. Результат тот же. Если файл не связан с программой, все работает. Если принадлежит пакету программы, то нет. А просто из консоли все работает...

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 7804
  • We were here
    • Просмотр профиля
Re: Как отвязать файл принадлежащий пакету
« Ответ #7 : 10 Ноября 2024, 22:45:34 »
printf
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.034 секунд. Запросов: 25.