web-dev-qa-db-ja.com

自分のパッケージからスクリプトを実行できません

この guide を使用して簡単なパッケージを作成しましたが、内部でスクリプトを実行できません。

mypackという名前のフォルダーには、/usr/bin/myscript.shというコマンドが含まれています(「Hello World」のようなメッセージをエコーするだけです)、およびDEBIANという名前のフォルダーには、controlという名前のファイルが含まれています。

Package: mypack
Version: 1.0-1
Maintainer: Alex
Architecture: all
Section: misc
Description: echo me

dpkg-deb --build mypack;を使用して構築およびインストールしました。 dpkg -i mypack.debガイドに記載されているとおり。

最後に、スクリプトスクリプトを実行して、それが機能するかどうかを確認したいとき、できませんでした。私が試してみました:

  1. myscriptmyscript: command not foundを返します)
  2. myscript.shbash: /usr/bin/myscript.sh: Permission deniedを返します)
  3. Sudo myscript.shSudo: myscript.sh: command not foundを返します)
  4. mypack myscriptおよびmypack myscript.sh(両方ともmypack: command not foundを返します)

それをどのように実行すれば、実際に機能するのですか、またはスクリプトを実行できない重要な手順がありませんか?

6
Alex F

スクリプトは実行可能として設定されていません。スクリプトと同じようにnotパッケージによってインストールされます。実行可能ビットが設定されていることを確認する必要があります。

次の2つのオプションがあります。

  1. パッケージを作成するとき、作業ディレクトリでこれを実行して、スクリプトの実行可能ビットが設定されていることを確認してくださいbeforeパッケージを作成しますBeforeパッケージをビルドします。

    chmod + x /path/to/script.sh

OR ...

  1. パッケージのpostinstスクリプトを使用して、実行可能ビットを設定しますafterインストール。次のようなコマンドを.postinstスクリプトに追加します。

    chmod + x /usr/bin/myscript.sh

いくつかの点では、両方のメソッドjustを使用して、確実に実行可能なものとして設定します。頭痛の種になることもありますが、確認しないよりは確認するの方が適切です。少なくとも、私の意見では。


myscriptとして実行できないスクリプトについては、myscriptmyscript.sh異なるオブジェクトであるためです。

必要な場合は、パッケージの.postinstスクリプトで以下を実行します。

ln -s /usr/bin/myscript.sh /usr/bin/myscript

...そして、実行可能ビットの問題を修正すると仮定すると、myscript.shmyscriptの両方の、試行していた両方のバージョンで「動作する」はずです。

ただしこれを行う適切な方法は、代わりに、スクリプトをmyscriptとしてパッケージ化し、シェル拡張を含めないことです。次に、使用するインタープリターを示すシェバン行(#!)を先頭に含める必要があります。 .shは何でもかまいません。次に、myscriptをインストールするだけのパッケージをセットアップします。 muruが述べたように、postinstでリンクを作成することは避けるべきですが、何をしたいかはあなた次第です。目標を達成するための多くのdifferentの方法がありますが、実際にはパッケージングのドキュメントには厳密なガイダンスはありません。

8
Thomas Ward