8

私は、文字通り Python スクリプトといくつかのヘルパー シェル スクリプトで構成される、ごく単純なコマンドライン プログラムを持っています。些細なことですが、このプログラムのパッケージ化について学びたいと思います。

集めたものから、configure/make/install ルートに進みました。構成するものも作成するものも何もなかったので、単純にインストール セクションだけで Makefile を作成しました。

install:
        cp ./myProgram /usr/bin/my-program
        chown root:root /usr/bin/my-program
        chmod 777 /usr/bin/my-program
        cp -r ./ProgramResources /usr/lib/my-program
        chown -hR root:root /usr/lib/my-program
        chmod -R 777 /usr/lib/my-program

この時点で、私のプログラムは sudo make install で正常にインストールおよび実行されます。

次に、次のようにcheckinstallを使用して deb ファイルを作成しようとします。

sudo checkinstall sudo make install

成功したと報告されるため、インストール部分を通過したように見えますが、その後失敗します。

======================== Installation successful ==========================
cp: cannot stat `//var/tmp/tmp.jKCmESc0v7/newfiles.tmp': No such file or directory

Copying files to the temporary directory...OK

Stripping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list... FAILED!

Building Debian package...OK

Installing Debian package...OK

Erasing temporary files...OK

Deleting temp dir...OK


**********************************************************************

 Done. The new package has been installed and saved to

 ...

プログラムはインストールされていますが、私が知る限り、この新しく作成された .deb ファイルは何もしません。dpkg -L my-program 生成のみ

/.

手動で削除してdebファイルからインストールしても何も起こらないようです-実際にはどこにもファイルを配置しません。

だから、(1)私のアプローチに何か問題がありますか?(2) checkinstall の問題を解決するにはどうすればよいですか?

私はコードが得意ですが、パッケージ化/配布については何も知りませんでした。

4

3 に答える 3

7

sudo の二重使用が問題です。

install.sh のようなファイルで

#! /bin/bash
set -x
touch useless
cp useless /usr/share/useless

指図

sudo checkinstall --pkgname useless -y ./install.sh

動作中

sudo checkinstall --pkgname useless -y sudo ./install.sh
                                       ^^^^

ショー

cp: cannot stat ‘//var/tmp/tmp.Au4ympTNlT/newfiles.tmp’: No such file or directory

空のパッケージを生成します。

于 2014-05-21T13:22:55.057 に答える
4

これが質問に正確に答えているかどうかはわかりませんが、これまでに得たものは次のとおりです(ubuntu lucidでは、checkinstall 1.6.1):

私はオープンソース プロジェクトをビルドしようとしましたが、うまくビルドできました。次に、debian 用にパッケージ化してみました。

checkinstall -D --install=no --pkgname=$PKGNAME --pkgversion=0.0.1 --pkgrelease="svn-001" --maintainer=test@test.com --strip=no --stripso=no --addso=yes

これは基本的に同時に失敗しましたBuilding file list... FAILED!。などのgrep: /var/tmp/tmp.NaoiwTHT6F/newfile: No such file or directory報告がありました。

make上記のコマンドの最後に追加してみましcheckinstallたが、それもあまり効果がありませんでした。

最後に、私はこれを試しました:

make clean
checkinstall -D --install=no --pkgname=$PKGNAME --pkgversion=0.0.1 --pkgrelease="svn-001" --maintainer=test@test.com --strip=no --stripso=no --addso=yes -d2 make

スイッチ-d2はデバッグを有効にすることです。... makeもう一度 make を再実行します。

-d2一時ディレクトリが出力されます。

デバッグ: 一時ディレクトリは次のとおりです: [ /var/tmp/tmp.NaoiwTHT6F ]
、リストで確認できます...そして、確かに、newfile私の場合はそこに a が生成されていないことを確認できます(ただし、 、 、および がnewfilesありnewfiles.installwatchますnewfiles-tarnewfiles.tmp。実際、turnscheckinstallはスクリプトであることが判明したため、が 1 回だけ出現するbashことを確認できます。newfile

$ grep 'newfile ' `which checkinstall`
    grep '^/home' ${TMP_DIR}/newfile > /${TMP_DIR}/unwanted

また、デバッグはこれらのファイル/ディレクトリを指摘します:

debug: INSTW_EXCLUDE=/dev,/path/to/myproject-build,/proc,/tmp,/var/tmp,
debug: INSTW_ROOTPATH=/var/tmp/tmp.NaoiwTHT6F
debug: INSTW_LOGFILE=/var/tmp/tmp.NaoiwTHT6F/newfiles.tmp
debug: INSTW_DBGFILE=/var/tmp/tmp.NaoiwTHT6F/dbgfile

デフォルトでは、私のビルド フォルダーへのパス/path/to/myproject-buildは除外されていることに注意してください。これは、このプロジェクトがビルドされた実行可能ファイルを格納する場所でもあります。

 

どうやら、makewithincheckinstallが初めてビルドを行うときに、新しく生成された実行可能ファイルをキャプチャできるようです。ただし、私の場合、問題は、実行可能ファイルが呼び出されたのと同じディレクトリの下になることです。したがって、このダイアログでは:${TMP_DIR}/newfilescheckinstall

Some of the files created by the installation are inside the build
directory: /path/to/myproject-build

You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them?  [n]: y
Should I exclude them from the package? (Saying yes is a good idea)  [y]: n

...実際、私は答えなければなりませんn- そうでなければ、何も含まれません! 次に、次の方法で内容を確認できます。

dpkg --contents mytest.deb | less

ただし、問題は次のcheckinstallとおりです。

  • ディレクトリ.oだけでなく、ファイル含まれます.svn
  • /usr/bin絶対パスを相対パスとしてカウントします (実行可能ファイルを自動的に「送信」しません.so/usr/lib

 

簡単に言えば、上記のアプローチのいくつかは、.deb完全に空ではない を取得する可能性があります。しかし、それは必要なファイルだけがそこにあるという意味ではなく、通常のインストール先にルーティングされるという意味でもありません...

では、これが少しでもお役に立てば幸いです。
乾杯!

于 2012-07-03T21:58:16.907 に答える
1

同様の問題がありました。最終的に、私はこの非常に単純ですが、かなり手動のアプローチに従いました。

たとえば、パッケージ化するファイルを debian/usr/bin に配置します。通常のconfigure, make, make install手順を完了する必要はありません。

于 2014-04-04T12:50:16.580 に答える