Создание пакета 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, которых я знал, за помощью, или увидел бы другие пакеты, упакованные другими. (Вы можете легко получить источники большинства пакетов в своем терминале)