Устанавливать список пакетов, только если они еще не установлены

Я пытаюсь максимально автоматизировать свои настройки.

Для этого у меня есть списки пакетов, которые я хочу установить, например: banshee wireshark audacity thunderbird thunderbird-lightning калибр deluge unison-gtk usb-creator-kde ding digikam хром-браузер bleachbit soundconverter kdenlive firefox-kde-support vlc kwrite openjdk-6-jre icedtea6-plugin virtualbox virtualbox-guest-adds-iso.

Я хочу написать небольшой скрипт bash для вызова apt-get, чтобы установить эти пакеты только , если они еще не установлены.

В настоящее время у меня есть это, но оно не работает:

dpkg -s "$1" > /dev/null 2>&1 || apt-get -y install "$1", (где $ 1 - список)

7
задан 24 January 2012 в 18:19

4 ответа

apt-get довольно тихо пропустит любой пакет, который уже установлен, поэтому я не уверен, зачем ему нужна специальная обработка? то есть:

root@bun:~# apt-get -y install  vlc
Reading package lists... Done
Building dependency tree       
Reading state information... Done
vlc is already the newest version.

Есть ли какая-то конкретная причина, по которой она не будет работать для вас как есть?

0
ответ дан 24 January 2012 в 18:19

Я вернулся к своим заданным вопросам на этом сайте и понял, что никогда не публиковал команды, которые я использовал в итоге:

export DEBIAN_FRONTEND=noninteractive # stop annoying prompts
dpkg -s "$@" > /dev/null 2>&1 || apt-get -qq -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install "$@"
0
ответ дан 24 January 2012 в 18:19

Вы можете попробовать сохранить список уже установленных пакетов с помощью dpkg --get-selections > installed-software

Теперь вы можете использовать другие инструменты, чтобы найти, какие пакеты следует установить, например:

vadik@ubuntu:~$ cat installed-software | grep "indicator-weather"
indicator-weather               install
vadik@ubuntu:~$ cat installed-software | grep "indicator-cpufreq"
vadik@ubuntu:~$ 

Как вы можете видеть, вы можете определить, установлены ли indicator-weather или indicator-cpufreq с помощью grep

0
ответ дан 24 January 2012 в 18:19

Для сценария установки сеанса в реальном времени у меня было что-то вроде этого:

# returns 1 if the package was already installed and 0 otherwise. The first
# argument is the package name to be checked (and installed if not already).
# other arguments are passed to apt-get
try_install() {
    dpkg -l "$1" | grep -q ^ii && return 1
    apt-get -y install "$@"
    return 0
}

if try_install openssh-server; then
    sed /etc/ssh/sshd_config 's/UsePAM yes/UsePAM no/' -i
    reload ssh
fi
try_install screen && wget lekensteyn.nl/files/screenrc -O ~/.screenrc
# passing extra options and package names to apt-get
try_install firefox --no-install-recommends firefox-kde-support

Если приложение уже было установлено, я предполагал, что оно настроено.

0
ответ дан 24 January 2012 в 18:19

Другие вопросы по тегам:

Похожие вопросы: