Рейтинг:4

Установить из файла, содержащего вывод из списка apt --installed

флаг co

У меня есть файл, содержащий вывод список подходящих --установлен с другой машины.

то есть

accountservice-ubuntu-schemas/focal,focal,now 0.0.7+17.10.20170922-0ubuntu1 все [установлено,автоматически]
accountservice/focal-updates,focal-security,now 0.6.55-0ubuntu12~20.04.5 amd64 [установлено,автоматически]
acl/focal,теперь 2.2.53-6 amd64 [установлено,автоматически]

...и так далее.

Есть ли простой способ установить эти пакеты с помощью вышеупомянутого файла и командной строки?

muru avatar
флаг us
Вы хотите установить эти конкретные версии?
Gigi Bayte 2 avatar
флаг co
@muru Хороший вопрос.Пока все в списке пакетов имеет свои зависимости, я в порядке, если версии такие же или новее. (Как есть, можно предположить, что о зависимостях позаботятся.)
Рейтинг:5
флаг zw

В APT четко указано, что он не предназначен для использования со сценариями:

ИСПОЛЬЗОВАНИЕ СКРИПТА И ОТЛИЧИЯ ОТ ДРУГИХ ИНСТРУМЕНТОВ APT
подходящий(8) командная строка разработана как инструмент для конечного пользователя и может изменять поведение между версиями. Хотя он пытается не нарушать обратную совместимость, это также не гарантируется, если изменение кажется полезным для интерактивного использования.

Все особенности подходящий(8) доступны в специальных инструментах APT, таких как способный получить(8) и apt-кэш(8) тоже. подходящий(8) просто изменяет значение по умолчанию для некоторых опций (см. apt.conf(5) и, в частности, область действия Binary). Таким образом, вы должны предпочесть использовать эти команды (возможно, с включенными некоторыми дополнительными параметрами) в своих сценариях, поскольку они максимально сохраняют обратную совместимость.

Вы используете неправильный инструмент. Лучший способ - использовать дпкг сам:

дпкг -л | awk '$1 == "ii" {print $2}' > установлен
sudo apt-get install $(кот установлен)

Подробности:

  • человек способный локально или онлайн;
  • мужчина дпкг локально или онлайн.

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


Хотите комплексное обслуживание - попробуйте мой скрипт питона по имени srslsud (Сценарий сохранения/восстановления списка программного обеспечения для Ubuntu и тематических ресурсов Debian).
Он сохранит все репозитории APT, их ключи GPG; списки приложений Snaps, Flatpaks и Ubuntu Make в файл JSON с первой машины.
Затем вы можете восстановить этот список, используя тот же файл JSON на втором компьютере.

marcelm avatar
флаг cn
Мне нравится, как вы говорите, что использование `apt` не предназначено для прямого машинного синтаксического анализа, а затем вы используете вызов `dpkg`, который требует двух шагов фильтрации, прежде чем его можно будет проанализировать: P – Рассматривали ли вы `dpkg --get-selections `/`dpkg --set-selections`?
Nate T avatar
флаг it
Я пошел с apt, чтобы обойти ошибки в случае уже установленных пакетов. Я не мог вспомнить, будет ли запуск `dpkg` непосредственно в этих экземплярах ошибкой или нет, но я точно знал, что apt просто проигнорирует их. Честно говоря, предупреждение Apt никогда не имело для меня смысла. Они жалуются, что обновления могут нарушить текущие реализации, но это верно для любого программного обеспечения. Это основная причина нашей системы управления версиями «X.X.XX», различающей критические и некритические изменения.
bac0n avatar
флаг cn
Вывод @NateT из `apt` зависит от локали.
Nate T avatar
флаг it
@ bac0n Понятно. Тогда это имеет смысл. Хорошо знать. Функциональность на основе локали встроена в логику apt-get или только в интерфейс?
Рейтинг:5
флаг us

Вы можете извлечь часть перед первой / и использовать это с xargs установить через подходящий:

xargs -a <(awk -F/ '{print $1}' какой-то файл) apt install

Или же:

awk -F/ '{print $1}' какой-то файл | xargs apt install -y
Рейтинг:1
флаг it

На самом деле я недавно написал скрипт на своей машине, который по своей сути делает именно это. Я делаю это, сначала подключая sed 's/\/.*//g' чтобы удалить все после косой черты. Затем вывод направляется в xargs /usr/bin/sudo apt установить.

Как @N0rbert упомянул о своем решении, главная слабость здесь заключается в том, что требуется только один случай ошибки (например, отсутствующий репо в источники.список), чтобы остановить всю операцию. Поэтому, если вы используете исходный файл, отличный от системы, сгенерировавшей входные данные, решение, с которым вы работаете, должно сначала проверить, доступен ли pkg для вашей системы. В общем, ваш выбор будет зависеть от предполагаемого варианта использования.

Например, вы, вероятно, могли бы уйти, не проходя через сед, но в моем случае скрипт использует tee для сохранения списка в файл, а затем выполняет дальнейшую обработку, используя файл в качестве входных данных.Фактически, сам список является центральной темой этого сценария и нескольких других, которые работают с ним в тандеме.

Пара замечаний: вам не нужно беспокоиться о том, установлен ли пакет уже на вашем компьютере. Если это так, apt просто пропустит его. Кроме того, поскольку вы, скорее всего, собираетесь установить довольно много пакетов во время работы, рекомендуется начать с обновление sudo apt && обновление sudo apt команда. Это избавит вас от необходимости загружать кучу пакетов только для того, чтобы в конечном итоге загрузить несколько более новую версию для многих из них чуть позже.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.