Я пытаюсь получить список пакетов, которые помечены как "обновления безопасности"
Моя базовая система - Ubuntu 14.04.
Например, в Ubuntu 14.04 есть скрипт, который перечислит количество доступных обновлений. Его использует динамический motd.
/usr/lib/update-notifier/apt-check
Выполнение этого без аргументов дает вывод через точку с запятой в stderr, например:
$ /usr/lib/update-notifier/apt-check
60;11 <-- (this is actually standard error)
Для этого скрипта есть флаги "читабельные" и "имена пакетов". Большой! Но «имена пакетов» просто выгружают обновляемые пакеты, они не помещаются в стопки безопасности / не безопасности.
Как узнать, что находится в корзине «обновления безопасности»?
Я пробовал такие вещи, как:
apt-get -s dist-upgrade | grep "^Inst" | grep -i security
Этот мне не подходит.
Я подумываю о том, чтобы разобрать сценарий apt-check и повторно использовать его, но я хотел бы знать, есть ли существующее средство для выполнения того, что я хочу, прежде чем я это сделаю.
Обновить
Я закончил тем, что модифицировал скрипт Python "/ usr / lib / update-notifier / apt-check" и в основном добавил вывод для печати деталей пакета всякий раз, когда этот скрипт выполнял проверку с помощью функции "isSecurityUpgrade ()". (Подробности см. В этом сценарии)
РЕДАКТИРОВАТЬ: И мои извинения за то, что не спрашивали в комментариях, но я слишком новичок и у меня нет репутации.
Если вы ищете только те, которые поступают из репозиториев безопасности, я использую приведенный ниже код с cron, чтобы отправлять мне электронные письма раз в неделю с наших неконтролируемых серверов.
#!/bin/bash
#-------------------------------------------------------------------------------------------------#
#- Name....: checkSecurityupdates.sh
#- Notes...:
#-------------------------------------------------------------------------------------------------#
# create fresh securities file each run
grep "-security" /etc/apt/sources.list | sudo grep -v "#" > /etc/apt/security.sources.list
echo "created security specific source list"
# Create the security file list
echo 'n' | apt-get upgrade -o Dir::Etc::SourceList=/etc/apt/security.sources.list >> /root/securities-to-update.txt
echo "created list of security updates"
# What's the mimetype
get_mimetype(){
# warning: assumes that the passed file exists
file --mime-type "$1" | sed 's/.*: //'
}
# some variables
from="SecUpdates-Report@example.com"
to="monitor-this-mailbox@example.com"
subject=`hostname`
boundary="ZZ_/afg6432dfgkl.94531q"
body="Please see attached"
declare -a attachments
attachments=( "securities-to-update.txt" )
# Build headers
{
printf '%s\n' "From: $from
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary=\"$boundary\"
--${boundary}
Content-Type: text/plain; charset=\"US-ASCII\"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
$body
"
# now loop over the attachments, guess the type
# and produce the corresponding part, encoded base64
for file in "${attachments[@]}"; do
[ ! -f "$file" ] && echo "Warning: attachment $file not found, skipping" >&2 && continue
mimetype=$(get_mimetype "$file")
printf '%s\n' "--${boundary}
Content-Type: $mimetype
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$file\"
"
base64 "$file"
echo
done
# print last boundary with closing --
printf '%s\n' "--${boundary}--"
} | sendmail -t -oi
echo "sent security updates list"
# cleanup security files
rm /etc/apt/security.sources.list
rm /root/securities-to-update.txt