Создаем скрипт автоматического добавления репозиториев и установки пакетов.

Один из читателей просил написать статью про создание скрипта, чтобы автоматически добавить нужные репозитории и установить из них нужные нам пакеты.

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

Вот собственно об этом и пойдет речь в данной статье.

Для начала опишу команды:

sudo - это команда, которая дает права суперпользователя, для доступа к действиям root текущему пользователю.

apt-get - это пакетный менеджер в ubuntu.
с помощью пакетного менеджера мы обновляем систему, устанавливаем пакеты. Облегчает жизнь пользователям.
Итак нам понадобятся команды пакетного менеджера:
apt-get update - обновляет информацию о пакетах в добавленных в систему репозиториях
add-apt-repository - данная команда добавляет репозитории в систему.
возможно два способа добавления:
  1. add-apt-repository 'deb uri distribution [component1] [component2] [...]'
  2. add-apt-repository ppa:<ppa_name>
Вот, стоит также упомянуть, что нужно в скрипте указывать параметр
-y
так как придется подтверждать установку или обновление системы без этого параметра, и весь автоматизм теряется.
Можно еще добавить параметр
--force-yes 
означает отвечать на любые вопросы «ДА».
Например о решении проблемы с зависимыми пакетами
Пожалуй достаточно.

Приступим к практике.

Советую также прочитать мою статью о скриптах sh, так как там полезные вещи описаны:


Создаем простой текстовый файл, называем его "name.sh" (называйте как угодно, главное, чтобы разрешение было .sh)

Открываем текстовым редактором.
Для начала нужно обязательно поставить вверху следующее обозначение:
#!/bin/bash

Важное замечание!
Не вводите команды в скрипт используя команду sudo, так как скрипт вы будете запускать с помощью этой команды, и следовательно все команды внутри скрипта будут выполняться от суперпользователя.
А если внесете эту команду в скрипт, то будет спрашивать ввод пароля, а при долгой выполнении одной из команд, прервется сессия суперпользователя, вы пойдете пить чай, а в командной строке будет висеть выполнение задачи. Думаю смысл ясен.

Итак сначала мы записываем команду для обновления информации о пакетах:
apt-get update
Затем с новой строчки вписываем команду для обновления системы полностью:
apt-get -y --force-yes dist-upgrade
Теперь можно записывать сюда нужные репозитории, каждое добавление с новой строчки, я лишь покажу несколько примеров добавления различных репозиториев:
add-apt -repository ppa:rvm/smplayer
либо
add-apt -repository 'deb http://packages.linuxmint.com/ julia main'
либо как из моей статьи по установке opera и google chrome:
вписываем команду (в одну строку) для добавления репозитория chrome: 
sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
Теперь загружаем ключ репозитория Chrome:
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

Что я хочу донести до вас?
То есть Вы прописываете те команды, что вводите в консоле без sudo для установки тех пакетов что вам нужно.
Только здесь удобнее сначала добавить все репозитории и ключи, а потом уже список пакетов поставить сразу.

После того, как добавили список репозиториев, теперь нужно записать команду для обновления информации о пакетах в репозиториях:
apt-get update
Затем, можно ввести команду, чтобы проверить, что у всех добавленных репозиториев добавились ключи, и если у каких то репозиториев ключи не добавились, добавятся (команду также в одну строчку):
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `apt-get update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`
Для установки пакетов воспользуемся следующей "фишкой":
Создаем именованный список элементов:
PACKAGES="p7zip libgcc faad  gimp conky"
В этот список вы записываете все пакеты через пробел, которые хотите установить. 

А потом следующая строчкой устанавливаем этот список пакетов:
sudo apt-get -y --force-yes install $PACKAGES

Вот таким образом у вас должно получиться нечто такое (для увеличения картинки кликните по ней):


Кроме того в этот скрипт можно добавить и удаление программ, которые в убунту стоят по умолчанию(как пример), просто запишите с новой строки
apt-get -y --force-yes remove название_пакета
Кроме этого, еще можно вставить с новой строки команды для настройки системы gsettings, например команду для решения проблемы с коддировкой:
gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8', 'WINDOWS-1251', 'CURRENT', 'ISO-8859-15', 'UTF-16']"
В принципе всё, если будут еще какие-то вопросы специфичные по этому поводу, задавайте в комментариях.
Я постараюсь ответить и в случае чего дополнить статью.

Ну и конечно, чтобы запустить скрипт:
sudo sh /путь/script.sh
Вместо script.sh ваше название скрипта и путь.

Вот и всё.

Поделиться:

Если у Вас возникли вопросы.

Приглашаю задавать их на сервисе вопросов и ответов: Ask LinuxRussia.com.
Там Ваши вопросы не потеряются и Вы быстрее получите ответ, в отличие от комментариев.

16 коммент. :

  1. Класс, вот таких бы статей побольше, спасибо. Однозначно в закладки.

    ОтветитьУдалить
    Ответы
    1. Спасибо за отзыв, буду стараться. Просто не всегда есть время.

      Удалить
  2. Кому интересно, скрипт автоматической установки - http://ubuntuone.com/1dfgwAHuphn10VoKaq3QIu
    Замечания.
    1)После добавления репозитариев и обновления списка пакетов, перед установкой пакетов, думаю, стоит применять команду apt-get -y dist-upgrade , для обновления системы. Она корректно обновит систему и программы до актуального состояния.
    2)Для полной автоматизации установки, можно добавить команду dpkg -i /путь до папки/*.deb , для установки программ, у которых нет репозитариев, из пакетов. Предварительно сохраняем нужные пакеты в папку.
    3)Для удаления всех неиспользуемых пакетов, из установленных в системе, в конце можно применить команду apt-get -y autoremove .
    4)Для автоматизации установки пакетов, которые выводят окно подтверждения, использовал xdotool. Работает следующим образом. Запускаем скрипт в терминале, сворачиваем окно терминала, перед установкой программы, показывающей окно подтверждения, на передний план выходит окно терминала, через 10 секунд, автоматически нажимается Tab, затем через 2 секунды нажимается Enter.

    ОтветитьУдалить
    Ответы
    1. перед установкой пакетов, думаю, стоит применять команду apt-get -y dist-upgrade

      Мы сделали это с самого начала. Скрипта. Если есть желание делать по другому, то конечно. Я же не настаивал именно на таком, просто показал как это делается. Так же можно добавить и dpkg -i /путь до папки/*.deb
      apt-get autoclean и apt-get autoremove
      Да можно хоть добавить обновление ядер :)
      Это уже ваше решение.

      Удалить
    2. Да, извиняюсь, не заметил. Статья хорошая. Подробно и четко.
      Замечание по скрипту script.sh
      Из начала скрипта убрать строки:
      #Начальное обновление системы
      apt-get -y update
      apt-get -y --force-yes dist-upgrade
      и добавить строку:
      apt-get -y --force-yes dist-upgrade
      после строк:
      #После того как добавили репозитарии и ключи, обновляем информацию о пакетах
      apt-get -y update

      Это нужно для того чтобы во первых не терять времени на двойную работу команды apt-get -y update, во вторых обновление информации о пакетах и установку/обновление этих пакетов нужно делать после добавления новых репозитариев, так как именно оттуда будет браться информация о новых пакетах.

      Удалить
    3. Ну да, в принципе логично. Поправлю этот момент.

      Удалить
  3. а нельзя ли сделать скрипт, который бы считал список репозиториев уже установленных пакетов в систему и сохранил его в файл с тем, чтобы, скажем после переустановки системы можно было восстановить установленное ПО одной командой?

    ОтветитьУдалить
  4. В этот список вы записываете все пакеты через запятую, которые хотите установить.
    Не через запятую, а через пробел, как при обычной установке через apt-get install.
    Анонимный, можно, и не так сложно. Все используемые репозитории хранятся в папке /etc/apt/. Точнее это файлы /etc/apt/source.list и папка /etc/apt/source.list.d. Если скопировать ее в другую систему, а потом установить ключи командой:
    sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com `apt-get update 2>&1 | grep -o '[0-9A-Z]\{16\}$' | xargs`
    , то все должно заработать.

    ОтветитьУдалить
    Ответы
    1. Спасибо, действительно написал "через запятую", Сейчас исправлю.

      Удалить
    2. Про папки правильно написали, всё именно так и есть. Должно сработать.

      Удалить
  5. Спасибо большое за такую полезную статью! Ваш сайт стал для меня вторым домом:))

    ОтветитьУдалить
  6. coden, на ваш скрипт ругается терминал )
    а именно на строку if [[ -n "$DISPLAY" ]] ; then
    и
    function press_key_tab_enter()

    в чем может быть ошибка?

    ОтветитьУдалить
    Ответы
    1. Составьте свой скрипт на примере моей статьи и не будет ругаться.

      Удалить
    2. Edward, вопрос в автоматической установке пакета с кодеками, где нужно вмешательсво - нажать таб и интер, я так понимаю у вас это не автоматизировано.

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

      Удалить
    3. вот это я не учел, спасибо. Попробую обход этого момента на днях и допишу в статье.

      Удалить