いくつかのパッケージのインストールを自動化する小さなスクリプトが bash にあります。apt-get を使用していくつかのパッケージをインストールし、残りはソースからインストールします。必要なすべてのソースを単一の tar ファイルに tar しました。サンプル スクリプトは次のようになります。
#!/bin/bash
apt-get install wget gcc g++ ruby php5 php5-dev xz-utils bzip2 -y
cd /usr/local/bin/
wget my-sources.tar.gz
tar zxvf my-sources.tar.gz
cd my-sources
tar zxvf package1.tar.gz
cd package1
./configure && make && make install
cd /usr/local/src/my-sources
tar zxvf package2.tar.gz
cd package2
./configure && make && make install
cd /usr/local/src/my-sources
tar zxvf package3.tar.gz
cd package3
./configure && make && make install
echo -e "\nFinished\n"
このスクリプトはzlib
、Python 2.7 を使用してエンコードされます。
import tempfile
import subprocess
import zlib
with open("/usr/local/src/sample.sh") as inputfile:
teststr = zlib.compress(inputfile.read()).encode('base64')
print teststr
これは、次のように実行される python スクリプトに渡されます。
thisstr = "Gu11nX1eVdeGlaMoouIyJtOV/cPBWrp1b7OeY7P7GXtzb
x7HETWRhTHC6NzM3k0nH6dw8uFs+qRtkJWiPrBGs1mlXWJjt7ZSUHe0
ZougLFsrAmxs3b+l+q9UKFrL1aAt0glTEo8bUuSO7Gjfe3JaYpedEgt
qkbZtz825OWUlyiz+pMPmkOdlhYu2ia+at+ZJIGZRkFzsBIqJKNhAQ4
LlBdMzdGu593UzCBtsspZiVntsFlzbyefpjCBk+PDKbyefOZMPy9Xd/
wL3ieojA=="
str=zlib.decompress(thisstr.decode('base64'))
with tempfile.NamedTemporaryFile() as scriptfile:
scriptfile.write(str)
scriptfile.flush()
subprocess.call(['/bin/bash', scriptfile.name])
ここで何が起こるかというと、apt-get
が実行されている間に、wget
が試行されます。wget
はまだインストールされていないため、wget コマンドは失敗し、実行はコンパイルおよびビルドの手順に移ります (ファイルが利用できないため、エラーがスローされます) 。その間ずっと、apt-get
はまだ実行されています。
これを回避するために2つのステップを試しました:
sleep 5
コマンドの最後に追加されapt-get
ます。これは役に立ちませんでした。- 別の関数を入れて
、コマンドの
apt-get
直前に関数を呼び出しました。wget
これも役に立ちませんでした。
もちろん、2 回目に実行すると、パッケージがインストールされます (使用してインストールするすべてのパッケージapt-get
が既に存在するため)。
これはテスト済みであり、Debian 6/Debian 7 用です。
このエラーを修正するにはどうすればよいですか?