У меня есть небольшой скрипт в bash, который автоматизирует установку нескольких пакетов. Он устанавливает несколько пакетов, используя apt-get, а остальные - из источников. У меня есть все источники, которые мне нужны, в один tar-файл. Пример сценария выглядит следующим образом:apt-get не работает должным образом в сценарии bash
#!/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
Это затем передается в сценарий питона, который выполняет его следующим образом:
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
.
это тоже не помогло.
Конечно, когда я запускаю его во второй раз, пакеты устанавливаются (потому что все пакеты, которые будут установлены с помощью apt-get
, уже есть).
Это был протестирован и для Debian 6/Debian 7
Как я могу исправить эту ошибку?
Вы пытались поставить 'wait' после' apt-get'? – lifesaspanner
@lifesaspanner - Нет, я не знал о таком варианте. Не могли бы вы дать синтаксис 'wait', чтобы я мог попробовать? – rahuL
Это просто 'wait'. Просто введите его в строке после 'apt-get'. Посмотрите на 'man wait' для справки. – lifesaspanner