|
[51CTO.com クイック翻訳]場合によっては、パッケージ マネージャーを使用せずにデータやソフトウェアをユーザーに配布するための高速かつ信頼性の高い方法が必要になることがあります (たとえば、エンド ユーザーにアプリケーションをインストールするためのルート アクセス権がない場合があります)。 この問題はコンテナとPodman、またはDockerを使用することで解決できますが、ターゲットシステムでこれらが利用できない場合はどうなるでしょうか?また、アプリケーションがベアメタル環境で正しく動作することが要件の1つである場合はどうなるでしょうか? pip で Python を使用することもできます (Python 以外の成果物もパッケージ化できることはご存知でしょう)。ただし、インストールの制限 (仮想環境または --user オプション) が発生する可能性があり、Python コードをパッケージ化するための定型コードが必要になることは言うまでもありません。 この記事では、権限昇格を必要としない自己解凍スクリプトを作成するための、非常に小さいながらも効果的な手法を紹介します。 データを設定するDamiaan Zwietering 氏は、COVID-19 に関する優れた Git コードリポジトリを公開しています。データと可視化ツール(Jupyter ブックと Excel スプレッドシート)は揃っていますが、インストーラーがありません。もし、ユーザーにこのリポジトリを公開したいものの、Git にアクセスできない場合は、自己解凍型のインストーラーを作成すればいいでしょう。 実際には、配布したいデータは既に存在します。ただし、処理するサンプルデータもいくつかあるため、まずリポジトリをホームディレクトリにクローンします。
現時点では大量のデータとそれほど浅くないディレクトリ構造がありますが、`git archive` コマンドを使用して .tar ファイルを作成できます。
この例では、パッケージ化されたファイルはユーザーと共有するファイルです。 自己解凍スクリプトの構造自己解凍スクリプトは次の部分で構成されます。 1. ユーザーがデータを抽出するのに役立つコード(「ペイロード」) 2. スクリプトから抽出されるデータ(抽出対象)が抽出されるアンカー ポイント。 3. 後続のデータのアンカーポイントの位置を抽出します。 Bash は、このようにスクリプトを定義するのに非常に優れていることが証明されています。 ペイロードを作成する一つのアイデアです。配布したいデータが、多数のスクリプトとデータを含むディレクトリだとします。権限と構造はそのままに、ユーザーが自分のホームディレクトリに「解凍」できるようにしたいとします。 tarコマンドは動作するように思えます。しかし、ユーザーがtarの使い方を知らない場合や、tarballファイルをマウントする際に特別なオプション(特定のファイルのみを抽出するなど)が必要な場合を考えてみましょう。 もう1つの問題は、.tarアーカイブがバイナリファイルであることです。メールで送信する場合は、安全な送信のためにUuencodeまたはBase64を使用して正しくエンコードする必要があります。 どうすればいいでしょうか?.tarファイルを捨てずに、Bashスクリプト(すぐに作成します)に追加できるように準備しておきましょう。
.tar ファイルからデータを抽出するすべてのコンテンツを新しいディレクトリに移動できます。
あるいは、対策、試行、テストのリストなど、その一部のみを抽出することもできます。
この演習では、すべてのコンテンツがベース ディレクトリ (例: $HOME) に抽出され、次の結果になりました。
自己解凍スクリプトの解析以下は自己解凍型スクリプトのコードです。このスクリプトをご自身のGitリポジトリに保存し、他のデプロイメント環境で再利用できます。以下の点にご注意ください。
では、スクリプトにペイロードを追加するにはどうすればいいでしょうか? 2つの部分を結合するには、少しの猫用接着剤を使うだけです。
実行可能にする:
インストーラーがペイロードとどのように結合されるかがわかります。ペイロードが含まれているため、インストーラーのサイズはかなり大きくなります。 インストーラーを実行するこれは効果がありますか?ぜひご自身でも試してみてはいかがでしょうか?
自己解凍インストーラーは非常に便利です。自己解凍型インストーラーはさまざまな理由から非常に便利だと思います。 まず、スクリプトは好きなだけ複雑にもシンプルにもできます。最も複雑な部分は、スクリプトがペイロードをどこから抽出するかを定義することです。 この手法を知っておくと便利です。マルウェアインストーラーもこの手法を使用しているためです。これで、スクリプト内でこのようなコードを見つける準備がより整いました。同様に重要なのは、自己解凍型スクリプトでユーザー入力を検証することで、シェルインジェクションの悪用を防ぐ方法も理解できたことです。 原題: 自己圧縮スクリプトによるソフトウェアとデータのパッケージ、著者: Jose Vicente Nunez [この記事は51CTOによって翻訳されました。提携サイトへの転載の際は、元の翻訳者と出典を51CTO.comとして明記してください。] |