blob: 466028ee5ba1d1a9df38b98b035c95aa990b8d3a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
#!/bin/sh
#
#set -e
check_stamp()
{
stamp="$1"
interval="$2"
if [ $interval -eq 0 ]; then
return 1
fi
if [ ! -f $stamp ]; then
return 0
fi
# compare midnight today to midnight the day the stamp was updated
stamp=$(date --date=$(date -r $stamp --iso-8601) +%s)
now=$(date --date=$(date --iso-8601) +%s)
delta=$(($now-$stamp))
if [ $delta -ge $interval ]; then
return 0
fi
return 1
}
update_stamp()
{
stamp="$1"
touch $stamp
}
# we check here if autoclean was enough sizewise
check_size_constraints()
{
# min-age in days
MaxAge=0
MaxSize=0
CacheDir="var/cache/apt"
CacheArchive="archives/"
eval $(apt-config shell MaxAge APT::Archives::MaxAge)
eval $(apt-config shell MaxSize APT::Archives::MaxSize)
eval $(apt-config shell Dir Dir)
eval $(apt-config shell CacheDir Dir::Cache)
eval $(apt-config shell CacheArchive Dir::Cache::archives)
# sanity check
if [ -z "$CacheDir" -o -z "$CacheArchive" ]; then
echo "empty Dir::Cache or Dir::Cache::archives, exiting"
exit
fi
Cache="${Dir%/}/${CacheDir%/}/${CacheArchive%/}/"
# check age
if [ ! $MaxAge -eq 0 ]; then
find $Cache -name "*.deb" -mtime +$MaxAge -print0 | xargs -r -0 rm -f
fi
# check size
if [ ! $MaxSize -eq 0 ]; then
# reverse-sort by mtime
for file in $(ls -rt $Cache/*.deb); do
du=$(du -s $Cache)
size=${du%%/*}
# check if the cache is small enough
if [ $size -lt $MaxSize ]; then
break
fi
# delete oldest file
rm -f $file
done
fi
}
# check cache size first
check_size_constraints
UpdateInterval=0
DownloadUpgradeableInterval=0
eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
AutocleanInterval=$DownloadUpgradeableInterval
eval $(apt-config shell AutocleanInterval APT::Periodic::Autoclean)
# laptop check, on_ac_power returns:
# 0 (true) System is on mains power
# 1 (false) System is not on mains power
# 255 (false) Power status could not be determined
# Desktop systems always return 255 it seems
if which on_ac_power >/dev/null; then
on_ac_power
if [ $? -eq 1 ]; then
exit 0
fi
fi
UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
if check_stamp $UPDATE_STAMP $UpdateInterval; then
if apt-get -qq update 2>/dev/null; then
if which dbus-send >/dev/null; then
dbus-send --system / app.apt.dbus.updated boolean:true
fi
update_stamp $UPDATE_STAMP
fi
fi
DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
if check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
apt-get -qq -d dist-upgrade 2>/dev/null
update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
fi
AUTOCLEAN_STAMP=/var/lib/apt/periodic/autoclean-stamp
if check_stamp $AUTOCLEAN_STAMP $AutocleanInterval; then
apt-get -qq autoclean
update_stamp $AUTOCLEAN_STAMP
fi
|