Создание пакета debian для установки на путь с пробелами

У меня есть приложение Qt, которое я хочу развернуть как пакет deb. Я читал очень много источников, все немного разные - большая часть того, что я сделал, следует следующим образом: Как: подготовка заявки для подачи в Ubuntu Software Center

Я должен создать структуру папок в /usr/share/My Company's Folder/ (Пробелы и специальные символы в пути - неудачное требование; имена в верхнем регистре также... программа была перенесена из окон).

/usr/share/My Company's Folder/MainProject/content

Я создал пакет... и он, кажется, работает, устанавливается в правильном месте, и на удивление программа даже работает после этого.

Проблема: я не могу использовать пробел в именах путей. Я создал файл "install", как показано в ссылке выше. Он делает то, что должен - но я получаю сообщение об ошибке, если я пытаюсь разместить элементы в /usr/share/My Company's Folder/ - Я мог только заставить его работать, используя /usr/share/MyCompanyFolder/ (Без пробелов и специальных символов".

Настроить:

~/working_directory
  mainproject-1.0
     mainproject_1
        content
  mainproject-1.0.tar.gz

внутри mainproject-1.0 Я побежал

dh_make --copyright gpl -f ../mainproject-1.0.tar.gz 

выберите s, нажмите enter... Затем я изменил файлы в созданной папке debian.

Также создал файл "install" в папке debian:

mainproject_1/* /usr/share/My Company's Folder/MainProject

Ран

dpkg-buildpackage -rfakeroot -my@email.com

Работает, создает установщик, установщик работает...

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

Замечания:

Пробовал безуспешно

"/usr/share/My\ Company\'s\ Folder/"
"/usr/share/My Company's Folder/"
/usr/share/My\ Company\'s\ Folder/
/usr/share/My\040Company's\040Folder/
/usr/share/My?Company's?Folder/

После долгих поисков я нашел эту информацию

you can't install files with space with dh_install (= debian/*install files)
you have to rename/install them explicitly in debian/rules with install, mv or cp
e.g. with dh tiny rules:

override_dh_install
     dh_install
     install -m 644 "fi le" "debian/tmp/usr/share/fi_le"

Поэтому я попытался добавить в файл debian / rules (показывая номера строк)

12 %:
13  dh $@ 
14
15 override_dh_install:
16  dh_install
17  install -m 644 "debian/mainproject/usr/share/MyCompanyFolder" "debian/mainproject/usr/share/My Company's Folder"

последняя ошибка - с этой командой:

make[1]: Entering directory `/home/me/working_directory/mainproject-1.0'
dh_install
install -m 644 "My Company's Folder" "debian/mainproject/usr/share/MyCompanyFolder"
install: cannot stat `My Company's Folder': No such file or directory
make[1]: *** [override_dh_install] Error 1
make[1]: Leaving directory `/home/me/working_directory/mainproject-1.0'
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

Альтернативно попробовал

12 %:
13  dh $@ 
14
15 override_dh_install:
16  dh_install
17  mv -r "debian/mainproject/usr/share/MyCompanyFolder" "debian/mainproject/usr/share/My Company's Folder"

И в результате структура папок внутри Debian выглядит правильно, но я получил ошибки о недопустимых папках...

objdump: 'debian/mainproject/usr/share/My': No such file
objdump: 'Company's': No such file
.....

mkdir, тогда cp должен иметь тот же результат, что и mv, но, к сожалению, они помещали одну папку в другую... * воспринимается как фактическое имя...

Похоже, я никуда не денусь.

Обновление: ответ на мой вопрос, используйте команду mv в файле postinstall.

3 ответа

Решение

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

Это трюк

There is directories layout:
mytest-0.1/debian/changelog
             /compat
             /control
             /install
             /rules
mytest-0.1/usr/share/my company/file_a
                               /file_b
                               /file_c'

Изменить установочный файл следующим образом

usr/share/           /usr/

Затем упаковывает ваш пакет deb

$mytest-0.1>dpkg-buildpackage -rfakeroot -uc -us -tc

Жаль, что это может помочь вам

Что ж, ваш последний подход к использованию postinstall - хороший способ сделать это. Но причина неудачной первой попытки заключается в том, что патч внутри скрипта установки Debian (то есть debian/rules debian/install и, возможно, что-то еще) основан на пакете Debian, а не на том пути, о котором вы думаете на твоем компьютере. Это путь по сравнению со всей папкой пакета. Вот почему это даст вам вывод, что "нет такого файла"

Извините за мой плохой английский, я хотел бы, чтобы ваша проблема была правильной, и объяснил это хорошо.

На вашем месте я бы обратился к сопровождающим Debian, которых я знал, за помощью, или увидел бы другие пакеты, упакованные другими. (Вы можете легко получить источники большинства пакетов в своем терминале)

Другие вопросы по тегам