Форум русскоязычного сообщества Ubuntu


Автор Тема: Как через терминал сделать полную установку ПО в 1 строку?  (Прочитано 1742 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн principium

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
    • Просмотр профиля
Суть.
Установка программ разбивается на 3 этапа - добавления репозитория, обновления данных репы, непосредственно сама установка. Но для того, чтобы все делалось однострочной командой, надо как-то в ней обозначить нажатие клавиш <Enter> (при добавлении репы) и <y> (при установке самого ПО).
Как при всем при этом должна выглядеть строка?

ТС не появлялся на Форуме более полугода по состоянию на 09/09/2019 (последняя явка: 26/01/2019). Модератором раздела принято решение закрыть тему.
--zg_nico
« Последнее редактирование: 09 Сентября 2019, 16:36:56 от zg_nico »

Оффлайн Yuriy_Y

  • Старожил
  • *
  • Сообщений: 1736
    • Просмотр профиля
    • Новоишимка
Кури в сторону выражения "конвейер команд".
С уважением, Юрий.

kononvaler

  • Гость
для скрипта это выглядит так:
yes | ./script для установки через apt-get достаточно ключа -y
sudo apt-get -y install you_programm

Оффлайн Yuriy_Y

  • Старожил
  • *
  • Сообщений: 1736
    • Просмотр профиля
    • Новоишимка
С уважением, Юрий.

shura1

  • Гость
Для PPA вот это вроде должно работать в самом простом виде (без проверок на ошибки) - в виде функции (надо поместить в .bashrc):

repinstall () {
    sudo add-apt-repository -y "$1" &&
    sudo apt-get update &&
    sudo apt-get -y install "$@"
}

Запускать

repinstall PPA PKG [PKG...]
Пароль должно спросить только для первого sudo, остальные команды должны "успевать" без пароля.

Ну а в одну строку, соответственно

sudo add-apt-repository -y PPA && sudo apt-get update && sudo apt-get -y install PKG [PKG...]
« Последнее редактирование: 06 Декабря 2015, 11:33:29 от shura1 »

Оффлайн principium

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
    • Просмотр профиля
shura1,
Попробовал последовательно несколько вариантов (скрипты не трогал). Выяснилось, что рабочий вариант только такой:

sudo add-apt-repository -y ppa:qutim/qutim && sudo apt-get -y update && sudo apt-get -y install qutim
т.е. к каждая операция производится только ч/з sudo.
А если у меня несколько таких программ, то как будет строка выглядеть?
sudo add-apt-repository -y [реп1] ; [реп2] && sudo apt-get -y update && sudo apt-get -y install [прог1] ; [прог2]
параметр "-у" для всех репозиториев и программ будет работать в этом случае?

И со скритами я не понял. Можно так же на конкретном примере с конкретными именами?

shura1

  • Гость
В помощи по командным утилитам (допустим grep --help и практически всех другие утилиты) практикуются такие условные обозначения - заглавными буквами выделяется элементы командной строки, что пользователь должен ввести сам, в квадратные скобки вводятся необязательные элементы, троеточия служат для указания, что элементов может быть один или несколько. Допустим

Usage: grep [OPTION]... PATTERN [FILE]...
означает, что после grep вводятся необязательные одна или несколько опций, обязательный шаблон (pattern) и один или несколько необязательных файлов.

В моей команде я пытался следовать этому (троеточие немного по-другому использовал) - то есть в команде (которая дана отдельной одной строкой) ОДИН обязательный параметр PPA - у тебя ppa:quitm, один обязательный параметр PKG (устанавливаемый package - пакет). В одном PPA как правило несколько пакетов - если их надо установить (но только из ЭТОГО ppa), то их можно через пробел (точка с запятой не нужна) перечислить в самом конце команды.

Если требуется добавить и установить пакеты с другого ppa, то эту же команду требуется вводить заново, что явно неудобно - команда длинная, имя ppa в середине, даже если взять эту команду из истории команд оболочки неудобно редактировать. Вот как раз для того, чтобы неудобные длинные команды не вводить каждый раз заново, используются три механизма - алиасы, функции и скрипты.

Алиас - это простейший механизм, он не подходит (требуются аргументы в середине строки) - поэтому или функция или скрипт, что практически одинаково с точки зрения их функционирования, но разные способы их написания и помещения туда, где они будут находится оболочкой при их запуске из командной строки.

Функция немного проще, хотя дело вкуса. Вообще-то, наверное, для такой команды скрипт больше подходит, но это уже нюансы.

Функции, при условии, что в качестве шелл выступает bash (по умолчанию практически все линукс дистрибутивы используют bash) помещаются в файл .bashrc - "невидимый" файл, расположенные в домашнем каталоге.

Открыть его можно из командной строки так (в юнити и гноме)

gedit ~/.bashrc
В него помещается (с сохранением всего, что там уже есть, а скорее всего там уже что-то есть)

repinstall () {
    sudo add-apt-repository -y "$1" &&
    sudo apt-get update &&
    sudo apt-get -y install "$@"
}
Сохраняешься, закрываешь редактор и перезапускаешь терминал. Теперь в командной оболочки ты можешь ввести

repinstall PPA PKG [PKG]...
для установки одного или нескольких PKG (пакетов) из одного PPA. После запуска один раз потребуется ввести пароль.
« Последнее редактирование: 08 Декабря 2015, 17:49:41 от shura1 »

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Скриптом:
Код: (bash) [Выделить]
#!/bin/bash
IFS=$'\n'

# Список реп для добавления
REPS="ppa_name1
ppa_name2
ppa_name3
..."

# Список пакетов для установки
PKGS="package_name1
package_name2
package_name
..."

for REP in $REPS; do
add-apt-repository -y "$REP" || { echo "Ошибка при добавлении репы $REP"; exit 1; }
done

apt-get update || { echo "Ошибка при обновлении apt кэша."; exit 1; }
apt-get -y install $(echo "$PKGS" | tr '\n' ' ')


Запускать:
sudo bash script_name.sh
« Последнее редактирование: 10 Декабря 2015, 17:24:04 от Cxms »

kononvaler

  • Гость
(Нажмите, чтобы показать/скрыть)

Спасибо, заберу.
у меня использовался как-то такой скрипт, может пригодится что оттуда наковырять;
(Нажмите, чтобы показать/скрыть)
Там есть копирования, то есть были заготовки файлов в той-же директории. Не обращайте внимания, это пример ранее используемого скрипта, не правленный.
« Последнее редактирование: 09 Декабря 2015, 11:11:05 от kononvaler »

Оффлайн principium

  • Автор темы
  • Новичок
  • *
  • Сообщений: 46
    • Просмотр профиля
IFS=$'\n'для чего вот эта строка?

exit 1продолжение скрипта прерывается?

и по ключам какая-то противоречивая информация. не понял функционал вот этих: -с и -s.

Изначально предполагалось составить команду/скрипт установки всех необходимых репов и пакетов сразу, после установки ОС. Но т.к. не со всеми репами/пакетами для свежей версии ОС дела обстоят отлично, то хотелось бы добавить интерактивности или, хотя бы, чтобы скрипт продолжал работу не смотря на проблем/у/ы.

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Код: (bash) [Выделить]
IFS=$'\n'Это устанавливает для циклов новую строку как единственный разделитель аргументов.
http://www.opennet.ru/docs/RUS/bash_scripting_guide/c3270.html#IFSREF

Цитировать
продолжение скрипта прерывается?
Да. С запросом на продолжение:
Код: (bash) [Выделить]
{ echo -e "Ошибка при ...\nПродолжить - Enter"; read; }
Цитировать
не понял функционал вот этих: -с и -s.
-с "commands..." - выполняется список команд в ковычках, -s - указание оболочки.
man su
Цитировать
Но т.к. не со всеми репами/пакетами для свежей версии ОС дела обстоят отлично
Перед установкой чего-либо на свежую систему ее нужно сначала обновить:
sudo apt-get update && sudo apt-get dist-upgrade


Пользователь решил продолжить мысль 10 Декабря 2015, 17:35:56:
Цитировать
Изначально предполагалось составить команду
Командой:
(В REPS через пробел добавляем репы. В PKGS пакеты.)
sudo suREPS=""; PKGS=""; for REP in $REPS; do add-apt-repository -y "$REP" || { echo -e "Ошибка при добавлении репы $REP\nПродолжить - Enter"; read; }; done; apt-get update && apt-get -y install $PKGS
« Последнее редактирование: 10 Декабря 2015, 17:35:56 от Cxms »

 

Страница сгенерирована за 0.091 секунд. Запросов: 23.