web-dev-qa-db-ja.com

スペースのあるパスにインストールするdebianパッケージを作成する

DebパッケージとしてデプロイしたいQtアプリケーションがあります。私は非常に多くのソースを読んでいますが、すべて少し異なります-私がしたことのほとんどはこれに従います 方法:Ubuntuソフトウェアセンターに提出するためのアプリケーションの準備

私は/usr/share/My Company's Folder/にフォルダー構造を作成する必要があります(パスのスペースと特殊文字は残念な要件です。大文字の名前も...プログラムはWindowsから移植されました)。

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

私はパッケージを作成しました...そしてそれは動作しているようで、正しい場所にインストールされ、そして驚くべきことに、プログラムはその後も動作します。

問題:パス名にスペースを使用できません。上記のリンクに示すように、「インストール」ファイルを作成しました。それは想定されていることを行いますが、/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フォルダー内のファイルを変更しました。

Debianフォルダにも「インストール」ファイルを作成しました:

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

ラン

dpkg-buildpackage -rfakeroot [email protected]

それは動作し、インストーラーを作成し、インストーラーは動作します...

しかし、スペースを含むフォルダパスを作成することはできません。これが本当に必要なことです。

注意:

失敗しました

"/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/

多くの検索の後、私はこれを発見しました info

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と同じ結果になりますが、残念ながら、1つのフォルダを別のフォルダの中に配置し続けました... *は実際の名前と見なされます...

本当にどこにも行かないようです。

更新:私の質問に対する答えは、ポストインストールファイルでmvコマンドを使用することです。

1
Thalia

最後の例では、mkdirに-p引数がなかったため、ディレクトリは指定されたパスに作成されませんでした。残りはうまくいくはずです。引用符などの特殊文字を含む名前で継続的な問題が発生しますが、そのような名前にインストールする必要がある場合は、通常のディレクトリにインストールして、最後に名前を変更するというアプローチが適切です。スクリプトで必要な引用を使用して、すべてのナンセンスを回避し、最終用途でそれを処理させます。エンドユーザーが十分に大声で叫ぶと、Linuxシステムでそのような名前を使用する必要がないなどの合理的な何かが起こり、問題が発生する可能性があります。

0
ubfan1

それはトリックです

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'

installファイルを次のように変更します

usr/share/           /usr/

次に、debパッケージをパックします

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

それがあなたを助けることを願っています

1
user1395066

そうですね、ポストインストールを使用するための最終的なアプローチは、そうするための良い方法です。しかし、最初の試行が失敗した理由は、実際には、Debianのインストールスクリプト内のパッチ(つまり、debian/rules debian/installもおそらく何か他のもの)が、考えているパスではなく、Debianパッケージに基づいているためです。お使いのコンピュータ上。これは、パッケージ全体のフォルダーと比較したパスです。そのため、「そのようなファイルはありません」という出力が表示されます。

英語が下手で申し訳ありません。問題が正しければ、うまく説明できました。

私があなただったら、私が知っているDebianメンテナに助けを求めるか、他の人がパッケージ化した他のパッケージを見るでしょう。 (ほとんどのパッケージのソースをターミナルで簡単に取得できます)

1
Z-Y00