| Server IP : 61.19.30.66 / Your IP : 216.73.216.15 Web Server : Apache/2.2.22 (Ubuntu) System : Linux klw 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64 User : www-data ( 33) PHP Version : 5.3.10-1ubuntu3.48 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /usr/lib/byobu/ |
Upload File : |
#!/bin/sh -e
#
# updates_available: calculate and cache the number of updates available
#
# Copyright (C) 2008 Canonical Ltd.
# Copyright (C) 2011 Dustin Kirkland
#
# Authors: Dustin Kirkland <kirkland@ubuntu.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
___print_updates() {
local u= s=
read u s < "$1"
if [ -n "$u" ]; then
if [ "$u" -gt 0 ]; then
color b r W; printf "%d" "$u"; color -; color r W
if [ -n "$s" ] && [ "$s" -gt 0 ]; then
printf "$ICON_SECURITY"
else
printf "$ICON_UPDATES"
fi
color --
elif [ "$u" = "0" ] && [ -e "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/updates_available" ]; then
# Clear out byobu's status cache
rm -f "$BYOBU_RUN_DIR/status.$BYOBU_BACKEND/updates_available"*
fi
fi
}
___update_cache() {
local mycache=$1 RUN_THIS_ONE=
# Now we actually have to do hard computational work to calculate updates.
# Let's try to be "nice" about it:
renice 10 $$ >/dev/null 2>&1 || true
ionice -c3 -p $$ >/dev/null 2>&1 || true
# These are very computationally intensive processes.
# Background this work, have it write to the cache files,
# and let the next cache check pick up the results.
# Also, try to ensure that no more than one of these run at
# a given time; install the run-one package.
command -v run-this-one >/dev/null && RUN_THIS_ONE=run-this-one
if [ -x /usr/lib/update-notifier/apt-check ]; then
# If apt-check binary exists, use it
$RUN_THIS_ONE /usr/lib/update-notifier/apt-check 2>&1 | awk '-F;' 'END { print $1, $2 }' > "$mycache" &
elif command -v apt-get >/dev/null; then
# If apt-get exists, use it
$RUN_THIS_ONE apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst > $mycache &
elif command -v pkcon >/dev/null; then
# use packagekit to show list of packages
$RUN_THIS_ONE pkcon get-updates -p | grep -c '^Package' > "$mycache" &
elif command -v zypper >/dev/null; then
# If zypper exists, use it
$RUN_THIS_ONE zypper --no-refresh lu --best-effort | grep -c 'v |' > $mycache &
elif command -v yum >/dev/null; then
# If yum exists, use it
# TODO: We need a better way of counting updates available from a RH expert
$RUN_THIS_ONE yum list updates -q | grep -vc "Updated Packages" > $mycache &
elif command -v pacman >/dev/null; then
# If pacman (Archlinux) exists, use it
LC_ALL=C $RUN_THIS_ONE pacman -Sup | grep -vc "^\(::\| \)" > $mycache &
fi
}
___update_needed() {
# Checks if we need to update the cache.
# TODO: add more distro
local mycache=$1
# The cache doesn't exist: create it
[ ! -e "$mycache" ] && return 0
if command -v apt-get >/dev/null; then
# Debian/ubuntu
[ "/var/lib/apt" -nt "$mycache" ] || [ "/var/lib/apt/lists" -nt "$mycache" ]
return $?
elif [ -e "/var/lib/PackageKit/transactions.db" ]; then
[ "/var/lib/PackageKit/transactions.db" -nt "$mycache" ]
return $?
elif command -v pacman >/dev/null; then
# Archlinux
local db
for db in /var/lib/pacman/sync/*.db; do
[ "$db" -nt "$mycache" ] && return 0
done
return 1
fi
return 1
}
__updates_available_detail() {
if command -v apt-get >/dev/null; then
local detail=`apt-get -s -o Debug::NoLocking=true upgrade`
if [ "$1" = "--detail" ]; then
printf "$detail"
else
local short=`printf "%s" "$detail" | grep -c ^Inst`
printf "$short"
fi
fi
}
__updates_available() {
local mycache="$BYOBU_RUN_DIR/cache.$BYOBU_BACKEND/updates-available"
# If mycache is present, use it
[ -r $mycache ] && ___print_updates "$mycache"
# If we really need to do so (mycache doesn't exist, or the package database has changed),
# background an update now
___update_needed "$mycache" && ___update_cache "$mycache"
}
# vi: syntax=sh ts=4 noexpandtab