Я написал сценарий, который наряду с другими задачами подключается к удаленному серверу, извлекает список всех установленных пакетов и устанавливает их, например:
echo -e "\e[36m#===# Getting list of packages to install #===#\e[0m"
$ssh root@$srv 'rpm -qa --queryformat "%{NAME}\n" >/tmp/sw.lst'
$scp root@$srv:/tmp/sw.lst /tmp/
np=`cat /tmp/sw.lst |wc -l`
echo -e "\e[36m#===# $np Packages are going to be installed! #===#\e[0m"
/usr/bin/xargs yum -y install < /tmp/sw.lst
Моя проблема в том, что при просмотре списка он пропускает многие пакеты, которые поставлялись с установкой по умолчанию, и я пытаюсь сэкономить это время, возможно ли это?
Я не знаю способа определить, что этот пакет был установлен во время установки ОС, и этот список может варьироваться в зависимости от параметров, выбранных вами во время установки.
Обходной путь:
man sort
)использовать comm
отображать только строки не в обоих файлах
comm prodinstall.txt baseinstall.txt -2 -3 > install.txt
install.txt
теперь будет содержать только пакеты, которых нет в базовой установке.Я бы просто сделал
ssh root@$srv 'rpm -qa' | xargs yum -y install
и пойти выпить кофе или что-то еще, потому что найти решение, которое
вам все равно придется что-то вроде сравнения обеих машин rpm -qa
и отсортируйте его, запустите comm
трюк, как предложил SvW, и, наконец, использовать этот список для установки yum ...
почему бы просто не дать yum понять это?
Или еще лучше, почему бы не иметь замороженное репо, к которому подключены все ящики, а затем запускать новые установки (с помощью cobbler / foreman / spacewalk / what-have-you)? Затем вы будете знать, что каждый пакет установлен с самого начала, и каждая система будет выглядеть одинаково (или достаточно похоже)? Чтобы системы синхронизировались, я бы использовал марионетку и указывал список пакетов, которые должны быть там установлены ... - Тогда эта ситуация вообще не появится; так как вы хотите сэкономить время, используя это, я полагаю, вы делаете это много ...