この 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
ガイドに記載されているとおり。
最後に、スクリプトスクリプトを実行して、それが機能するかどうかを確認したいとき、できませんでした。私が試してみました:
myscript
(myscript: command not found
を返します)myscript.sh
(bash: /usr/bin/myscript.sh: Permission denied
を返します)Sudo myscript.sh
(Sudo: myscript.sh: command not found
を返します)mypack myscript
およびmypack myscript.sh
(両方ともmypack: command not found
を返します)それをどのように実行すれば、実際に機能するのですか、またはスクリプトを実行できない重要な手順がありませんか?
スクリプトは実行可能として設定されていません。スクリプトと同じようにnotパッケージによってインストールされます。実行可能ビットが設定されていることを確認する必要があります。
次の2つのオプションがあります。
パッケージを作成するとき、作業ディレクトリでこれを実行して、スクリプトの実行可能ビットが設定されていることを確認してくださいbeforeパッケージを作成しますBeforeパッケージをビルドします。
chmod + x /path/to/script.sh
OR ...
パッケージのpostinst
スクリプトを使用して、実行可能ビットを設定しますafterインストール。次のようなコマンドを.postinst
スクリプトに追加します。
chmod + x /usr/bin/myscript.sh
いくつかの点では、両方のメソッドjustを使用して、確実に実行可能なものとして設定します。頭痛の種になることもありますが、確認しないよりは確認するの方が適切です。少なくとも、私の意見では。
myscript
として実行できないスクリプトについては、myscript
とmyscript.sh
が異なるオブジェクトであるためです。
必要な場合は、パッケージの.postinst
スクリプトで以下を実行します。
ln -s /usr/bin/myscript.sh /usr/bin/myscript
...そして、実行可能ビットの問題を修正すると仮定すると、myscript.sh
とmyscript
の両方の、試行していた両方のバージョンで「動作する」はずです。
ただしこれを行う適切な方法は、代わりに、スクリプトをmyscript
としてパッケージ化し、シェル拡張を含めないことです。次に、使用するインタープリターを示すシェバン行(#!
)を先頭に含める必要があります。 .sh
は何でもかまいません。次に、myscript
をインストールするだけのパッケージをセットアップします。 muruが述べたように、postinstでリンクを作成することは避けるべきですが、何をしたいかはあなた次第です。目標を達成するための多くのdifferentの方法がありますが、実際にはパッケージングのドキュメントには厳密なガイダンスはありません。