Я пытаюсь получить список пакетов, которые помечены как имеющие «обновления безопасности»
Моя базовая система - 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)
Для этого скрипта есть флаги «читабельный» и «имена пакетов». Большой! Но «имена пакетов» просто выгружают обновляемые пакеты, они не помещаются в стопки безопасности / не-безопасности.
Как я могу узнать, что находится в «обновлениях безопасности» bucket?
Я пробовал такие вещи, как:
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