]>
Commit | Line | Data |
---|---|---|
c3df33af | 1 | #!/usr/bin/perl |
70df8302 MT |
2 | ############################################################################### |
3 | # # | |
4 | # IPFire.org - A linux based firewall # | |
d6c2e671 | 5 | # Copyright (C) 2007-2021 IPFire Team <info@ipfire.org> # |
70df8302 MT |
6 | # # |
7 | # This program is free software: you can redistribute it and/or modify # | |
8 | # it under the terms of the GNU General Public License as published by # | |
9 | # the Free Software Foundation, either version 3 of the License, or # | |
10 | # (at your option) any later version. # | |
11 | # # | |
12 | # This program is distributed in the hope that it will be useful, # | |
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of # | |
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # | |
15 | # GNU General Public License for more details. # | |
16 | # # | |
17 | # You should have received a copy of the GNU General Public License # | |
18 | # along with this program. If not, see <http://www.gnu.org/licenses/>. # | |
19 | # # | |
20 | ############################################################################### | |
c1ae1ad6 | 21 | |
accc9c30 MT |
22 | ### Clean up our environment |
23 | # | |
24 | delete @ENV{qw(IFS CDPATH ENV BASH_ENV PATH)}; | |
25 | $< = $>; | |
26 | ||
9a507db2 MT |
27 | # Store keys here |
28 | $ENV{"GNUPGHOME"} = "/opt/pakfire/etc/.gnupg"; | |
29 | ||
1bd42c89 | 30 | require "/opt/pakfire/lib/functions.pl"; |
66c36198 | 31 | |
1bd42c89 | 32 | my $interactive = 1; |
377560fb | 33 | my $force = "noforce"; |
d6c2e671 | 34 | my $locked; |
66c36198 | 35 | |
a6d327a7 | 36 | &Pakfire::logger("PAKFIRE INFO: IPFire Pakfire $Conf::version started!"); |
c1ae1ad6 | 37 | |
1bd42c89 MT |
38 | ### Check if we are running as root |
39 | # | |
40 | my $user = qx(whoami); | |
41 | chomp($user); | |
42 | unless ( "$user" eq "root" ) { | |
a6d327a7 | 43 | &Pakfire::message("PAKFIRE ERROR: You must run pakfire as user root!"); |
1bd42c89 MT |
44 | exit 1; |
45 | } | |
66c36198 | 46 | |
7bc1b6ac MT |
47 | unless ( -e "/var/ipfire/red/active" ) { |
48 | &Pakfire::message("PAKFIRE ERROR: You need to be online to run pakfire!"); | |
49 | exit 2; | |
50 | } | |
d6c2e671 SS |
51 | |
52 | # Check if a lockfile already exists. | |
53 | if (-e "$Pakfire::lockfile") { | |
54 | &Pakfire::message("PAKFIRE ERROR: Another instance of pakfire is already running!"); | |
55 | exit 1; | |
56 | } | |
57 | ||
58 | # Write lockfile. | |
59 | open(LOCK, ">$Pakfire::lockfile"); | |
60 | ||
61 | # Pakfire has locked in this session set locket to "1". | |
62 | $locked = "1"; | |
63 | ||
64 | # Close filehandle. | |
65 | close(LOCK); | |
66c36198 | 66 | |
06209efc MT |
67 | ### Check if we are started by another name |
68 | # | |
69 | if ( $0 =~ /pakfire-update$/ ) { | |
a6d327a7 | 70 | &Pakfire::message("CRON INFO: Running an update"); |
fc4ac7ac | 71 | my $random = int(rand(60)); |
5d22ef4e MT |
72 | &Pakfire::logger("CRON INFO: Waiting for $random seconds."); |
73 | sleep($random); | |
06209efc MT |
74 | $ARGV[0] = "update"; |
75 | $interactive = 0; | |
76 | } elsif ( $0 =~ /pakfire-upgrade$/ ) { | |
a6d327a7 | 77 | &Pakfire::message("CRON INFO: Running an upgrade"); |
5d22ef4e MT |
78 | my $random = int(rand(3600)); |
79 | &Pakfire::logger("CRON INFO: Waiting for $random seconds."); | |
80 | sleep($random); | |
06209efc MT |
81 | $ARGV[0] = "upgrade"; |
82 | $interactive = 0; | |
83 | } | |
66c36198 | 84 | |
1bd42c89 | 85 | unless (@ARGV) { |
5b2a12ff | 86 | &Pakfire::usage; |
1bd42c89 | 87 | } |
66c36198 | 88 | |
4b122800 MT |
89 | foreach (@ARGV) { |
90 | if ("$_" =~ "^-") { | |
750c1528 | 91 | # Turn off interactive mode |
4b122800 MT |
92 | $interactive = 0 if ("$_" eq "--non-interactive"); |
93 | $interactive = 0 if ("$_" eq "-y"); | |
66c36198 | 94 | |
750c1528 MT |
95 | # Turn off shell colors - Bad for displaying in webinterface |
96 | $Pakfire::enable_colors = 0 if ("$_" eq "--no-colors"); | |
66c36198 | 97 | |
377560fb MT |
98 | # Turn on force mode |
99 | $force = "force" if ("$_" eq "-f" ); | |
100 | $force = "force" if ("$_" eq "--force" ); | |
4b122800 MT |
101 | } |
102 | } | |
c1ae1ad6 | 103 | |
1bd42c89 MT |
104 | if ("$ARGV[0]" eq "install") { |
105 | shift; | |
66c36198 PM |
106 | |
107 | ### Make sure that the list is not outdated. | |
99e6df8e MT |
108 | &Pakfire::dbgetlist("noforce"); |
109 | ||
4bac9fdd | 110 | my %paklist = &Pakfire::dblist("all"); |
66c36198 | 111 | |
99e6df8e | 112 | my $dep; |
a08c3a2e | 113 | my @deps; |
99e6df8e | 114 | my $pak; |
a08c3a2e MT |
115 | my @paks; |
116 | my @temp; | |
186e3d2c | 117 | my $return; |
4b122800 | 118 | my @all; |
99e6df8e MT |
119 | foreach $pak (@ARGV) { |
120 | unless ("$pak" =~ "^-") { | |
4bac9fdd RR |
121 | if (defined $paklist{$pak}) { |
122 | if ("$paklist{$pak}{'Installed'}" eq "yes") { | |
123 | &Pakfire::message("PAKFIRE INFO: $pak is already installed"); | |
124 | next; | |
99e6df8e | 125 | } |
4bac9fdd RR |
126 | push(@paks,$pak); |
127 | push(@all,$pak); | |
128 | @temp = &Pakfire::resolvedeps("$pak"); | |
129 | foreach $dep (@temp) { | |
130 | push(@deps,$dep) if $dep; | |
131 | push(@all,$dep) if $dep; | |
132 | } | |
133 | } else { | |
a6d327a7 MT |
134 | &Pakfire::message(""); |
135 | &Pakfire::message("PAKFIRE WARN: The pak \"$pak\" is not known. Please try running \"pakfire update\"."); | |
136 | } | |
5b2a12ff | 137 | } |
a08c3a2e | 138 | } |
66c36198 | 139 | |
186e3d2c | 140 | unless (@paks) { |
a6d327a7 | 141 | &Pakfire::message("PAKFIRE ERROR: No packages to install. Exiting..."); |
186e3d2c MT |
142 | exit 1; |
143 | } | |
97520ed5 | 144 | |
186e3d2c | 145 | if (@deps) { |
519f8431 | 146 | my %sort = map{ $_, 1 } @deps; |
3a3c02ee | 147 | @deps = keys %sort; |
186e3d2c | 148 | &Pakfire::message(""); |
a6d327a7 | 149 | &Pakfire::message("PAKFIRE INFO: Packages to install for dependencies:"); |
186e3d2c | 150 | } |
373e13c2 | 151 | foreach $dep (@deps) { |
186e3d2c | 152 | my $size = &Pakfire::getsize("$dep"); |
1bd42c89 | 153 | $size = &Pakfire::beautifysize($size); |
35f38a8b | 154 | &Pakfire::message("PAKFIRE INFO: $dep \t - $size"); |
1bd42c89 | 155 | } |
373e13c2 CS |
156 | |
157 | &Pakfire::message(""); | |
158 | &Pakfire::message(""); | |
159 | &Pakfire::message("PAKFIRE INFO: Packages to install:"); | |
160 | foreach $pak (@paks) { | |
161 | my $size = &Pakfire::getsize("$pak"); | |
162 | $size = &Pakfire::beautifysize($size); | |
163 | &Pakfire::message("PAKFIRE INFO: $pak \t - $size"); | |
164 | } | |
66c36198 | 165 | |
4b122800 | 166 | my $totalsize; |
186e3d2c MT |
167 | foreach $pak (@all) { |
168 | $totalsize = ($totalsize + &Pakfire::getsize("$pak")); | |
4b122800 | 169 | } |
1bd42c89 | 170 | $totalsize = &Pakfire::beautifysize($totalsize); |
186e3d2c | 171 | &Pakfire::message(""); |
a6d327a7 | 172 | &Pakfire::message("PAKFIRE INFO: Total size: \t ~ $totalsize"); |
186e3d2c | 173 | &Pakfire::message(""); |
66c36198 | 174 | |
1bd42c89 | 175 | if ($interactive) { |
a6d327a7 | 176 | &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); |
1bd42c89 MT |
177 | my $ret = <STDIN>; |
178 | chomp($ret); | |
a6d327a7 | 179 | &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); |
1bd42c89 | 180 | if ( $ret ne "y" ) { |
a6d327a7 | 181 | &Pakfire::message("PAKFIRE ERROR: Installation aborted."); |
1bd42c89 MT |
182 | exit 1; |
183 | } | |
a6d327a7 MT |
184 | } else { |
185 | &Pakfire::logger("PAKFIRE INFO: Interaction skipped."); | |
1bd42c89 | 186 | } |
66c36198 | 187 | |
373e13c2 CS |
188 | # my %sort = map{ $_, 1 } @all; |
189 | # @all = sort keys %sort; | |
a08c3a2e MT |
190 | |
191 | ### Download first | |
373e13c2 | 192 | foreach $pak (@all) { |
186e3d2c | 193 | &Pakfire::getpak("$pak", ""); |
a08c3a2e | 194 | } |
c1ae1ad6 | 195 | |
35f38a8b MT |
196 | &Pakfire::message(""); |
197 | ||
373e13c2 | 198 | foreach $pak (@deps) { |
186e3d2c | 199 | &Pakfire::setuppak("$pak") if ($pak ne ""); |
1bd42c89 | 200 | } |
66c36198 | 201 | |
373e13c2 CS |
202 | |
203 | foreach $pak (@paks) { | |
204 | &Pakfire::setuppak("$pak") if ($pak ne ""); | |
205 | } | |
66c36198 | 206 | |
373e13c2 | 207 | |
1bd42c89 | 208 | } elsif ("$ARGV[0]" eq "remove") { |
e44b26cf | 209 | shift; |
66c36198 | 210 | |
e44b26cf MT |
211 | my @paks; |
212 | my $pak; | |
e44b26cf MT |
213 | foreach $pak (@ARGV) { |
214 | unless ("$pak" =~ "^-") { | |
215 | $return = &Pakfire::isinstalled($pak); | |
216 | if ($return ne 0) { | |
a6d327a7 | 217 | &Pakfire::message("PAKFIRE WARN: $pak is not installed"); |
e44b26cf MT |
218 | next; |
219 | } | |
e44b26cf | 220 | push(@paks, $pak); |
e44b26cf MT |
221 | } |
222 | } | |
66c36198 | 223 | |
e44b26cf | 224 | unless (@paks) { |
a6d327a7 | 225 | &Pakfire::message("PAKFIRE ERROR: No packages to remove. Exiting..."); |
e44b26cf MT |
226 | exit 1; |
227 | } | |
66c36198 | 228 | |
e44b26cf MT |
229 | &Pakfire::message(""); |
230 | &Pakfire::message(""); | |
35f38a8b | 231 | &Pakfire::message("PAKFIRE INFO: Packages to remove:"); |
e44b26cf MT |
232 | foreach $pak (sort @paks) { |
233 | my $size = &Pakfire::getsize("$pak"); | |
234 | $size = &Pakfire::beautifysize($size); | |
35f38a8b | 235 | &Pakfire::message("PAKFIRE INFO: $pak \t - $size"); |
e44b26cf | 236 | } |
66c36198 | 237 | |
e44b26cf | 238 | if ($interactive) { |
35f38a8b | 239 | &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); |
e44b26cf MT |
240 | my $ret = <STDIN>; |
241 | chomp($ret); | |
35f38a8b | 242 | &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); |
e44b26cf | 243 | if ( $ret ne "y" ) { |
35f38a8b | 244 | &Pakfire::message("PAKFIRE ERROR: Installation aborted."); |
e44b26cf MT |
245 | exit 1; |
246 | } | |
247 | } | |
66c36198 | 248 | |
e44b26cf MT |
249 | foreach $pak (@paks) { |
250 | &Pakfire::removepak("$pak"); | |
251 | } | |
66c36198 PM |
252 | |
253 | ||
1bd42c89 | 254 | } elsif ("$ARGV[0]" eq "update") { |
8e58bd37 | 255 | &Pakfire::makeuuid(); |
377560fb MT |
256 | &Pakfire::getmirrors("$force"); |
257 | &Pakfire::dbgetlist("$force"); | |
258 | &Pakfire::getcoredb("$force"); | |
e3670217 | 259 | |
4b122800 | 260 | } elsif ("$ARGV[0]" eq "upgrade") { |
0bd5b131 RR |
261 | my $use_color = ""; |
262 | my $reset_color = ""; | |
263 | ||
264 | if ("$Pakfire::enable_colors" eq "1") { | |
265 | $reset_color = "$Pakfire::color{'normal'}"; | |
266 | $use_color = "$Pakfire::color{'lightpurple'}"; | |
267 | } | |
268 | ||
5e1dbc95 RR |
269 | &Pakfire::message("CORE INFO: Checking for Core-Updates..."); |
270 | ||
271 | ### Make sure that the core db is not outdated. | |
272 | &Pakfire::getcoredb("noforce"); | |
273 | my %coredb = &Pakfire::coredbinfo(); | |
274 | ||
275 | if (defined $coredb{'AvailableRelease'}) { | |
276 | &Pakfire::upgradecore(); | |
277 | } else { | |
278 | &Pakfire::message("CORE INFO: No new Core-Updates available. You are on release ".$coredb{'Release'}); | |
279 | } | |
280 | ||
281 | &Pakfire::message("PAKFIRE INFO: Checking for package updates..."); | |
282 | ### Make sure that the package list is not outdated. | |
283 | &Pakfire::dbgetlist("noforce"); | |
0bd5b131 | 284 | |
5555c4b8 | 285 | my @deps = (); |
0bd5b131 | 286 | if (my %upgradepaks = &Pakfire::dblist("upgrade")) { |
9f1f68f1 | 287 | # Resolve the dependencies of the to be upgraded packages |
0bd5b131 | 288 | @deps = &Pakfire::resolvedeps_recursive(keys %upgradepaks); |
9f1f68f1 | 289 | |
0bd5b131 RR |
290 | foreach $pak (sort keys %upgradepaks) { |
291 | print "${use_color}Update: $pak\nVersion: $upgradepaks{$pak}{'ProgVersion'} -> $upgradepaks{$pak}{'AvailableProgVersion'}\n"; | |
292 | print "Release: $upgradepaks{$pak}{'Release'} -> $upgradepaks{$pak}{'AvailableRelease'}${reset_color}\n"; | |
293 | } | |
99e6df8e | 294 | &Pakfire::message(""); |
35f38a8b | 295 | &Pakfire::message("PAKFIRE UPGR: We are going to install all packages listed above."); |
99e6df8e | 296 | if ($interactive) { |
35f38a8b | 297 | &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); |
99e6df8e MT |
298 | my $ret = <STDIN>; |
299 | chomp($ret); | |
35f38a8b | 300 | &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); |
99e6df8e | 301 | if ( $ret ne "y" ) { |
35f38a8b | 302 | &Pakfire::message("PAKFIRE ERROR: Installation aborted."); |
99e6df8e MT |
303 | exit 1; |
304 | } | |
305 | } | |
0bd5b131 RR |
306 | |
307 | # Download packages | |
308 | foreach $pak (sort keys %upgradepaks) { | |
309 | &Pakfire::getpak("$pak", ""); | |
310 | } | |
66c36198 | 311 | |
0bd5b131 RR |
312 | # Download dependencies |
313 | foreach $pak (@deps) { | |
314 | &Pakfire::getpak("$pak", ""); | |
315 | } | |
316 | ||
317 | # Install dependencies first | |
318 | foreach $pak (@deps) { | |
319 | &Pakfire::setuppak("$pak"); | |
320 | } | |
321 | ||
322 | # Install all upgrades | |
323 | foreach $pak (sort keys %upgradepaks) { | |
324 | &Pakfire::upgradepak("$pak"); | |
325 | } | |
326 | } else { | |
327 | &Pakfire::message("PAKFIRE WARN: No new package upgrades available."); | |
99e6df8e | 328 | } |
9f1f68f1 | 329 | |
0bd5b131 RR |
330 | } elsif ("$ARGV[0]" eq "list") { |
331 | my $count; | |
2b921b79 | 332 | my $coreupdate = 0; |
0bd5b131 RR |
333 | my $use_color = ""; |
334 | my $reset_color = ""; | |
335 | my $filter = "all"; | |
336 | ||
2b921b79 RR |
337 | shift if ("$ARGV[1]" =~ "^-"); |
338 | ||
339 | if ("$ARGV[1]" =~ /installed|notinstalled|upgrade/) { | |
0bd5b131 | 340 | $filter = "$ARGV[1]"; |
2b921b79 RR |
341 | } elsif ($ARGV[1]) { |
342 | &Pakfire::message("PAKFIRE ERROR: Not a known option $ARGV[1]"); | |
343 | exit 1; | |
9f1f68f1 MT |
344 | } |
345 | ||
0bd5b131 RR |
346 | my $pak; |
347 | my %paklist = &Pakfire::dblist($filter); | |
348 | ||
349 | if ("$Pakfire::enable_colors" eq "1") { | |
350 | $reset_color = "$Pakfire::color{'normal'}"; | |
351 | $use_color = "$Pakfire::color{'lightgreen'}"; | |
9f1f68f1 MT |
352 | } |
353 | ||
2b921b79 RR |
354 | # Check for available core upgrade first if list of upgrades is requested |
355 | if ("$filter" eq "upgrade") { | |
356 | my %coredb = &Pakfire::coredbinfo(); | |
357 | ||
358 | if (defined $coredb{'AvailableRelease'}) { | |
359 | print "${use_color}Core-Update $coredb{'CoreVersion'}\n"; | |
360 | print "Release: $coredb{'Release'} -> $coredb{'AvailableRelease'}${reset_color}\n\n"; | |
361 | $coreupdate = 1; | |
362 | } | |
363 | } | |
364 | ||
0bd5b131 RR |
365 | foreach $pak (sort keys %paklist) { |
366 | if ("$Pakfire::enable_colors" eq "1") { | |
367 | if ("$paklist{$pak}{'Installed'}" eq "yes") { | |
368 | if (defined $paklist{$pak}{'AvailableProgVersion'}) { | |
369 | $use_color = "$Pakfire::color{'lightgreen'}"; | |
370 | } else { | |
371 | $use_color = "$Pakfire::color{'green'}"; | |
372 | } | |
373 | } else { | |
374 | $use_color = "$Pakfire::color{'red'}"; | |
375 | } | |
376 | } | |
377 | ||
378 | print "${use_color}Name: $pak\nProgVersion: $paklist{$pak}{'ProgVersion'}\n"; | |
379 | print "Release: $paklist{$pak}{'Release'}\nInstalled: $paklist{$pak}{'Installed'}\n"; | |
380 | if (defined $paklist{$pak}{'AvailableProgVersion'}) { | |
381 | print "Update available:\n Version: $paklist{$pak}{'ProgVersion'} -> $paklist{$pak}{'AvailableProgVersion'}\n Release: $paklist{$pak}{'Release'} -> $paklist{$pak}{'AvailableRelease'}\n"; | |
382 | } | |
383 | print "${reset_color}\n"; | |
384 | ||
99e6df8e | 385 | } |
66c36198 | 386 | |
0bd5b131 RR |
387 | $count = keys %paklist; |
388 | if ($count > 0) { | |
389 | print "$count packages total.\n"; | |
e3670217 | 390 | } else { |
2b921b79 RR |
391 | if (! $coreupdate) { |
392 | &Pakfire::message("PAKFIRE WARN: No packages where found using filter $filter."); | |
393 | exit 1; | |
394 | } | |
e3670217 | 395 | } |
2be67e38 RR |
396 | } elsif ("$ARGV[0]" eq "info") { |
397 | shift; | |
398 | ||
399 | my @paks; | |
400 | my $pak; | |
401 | foreach $pak (@ARGV) { | |
402 | unless ("$pak" =~ "^-") { | |
403 | push(@paks,$pak); | |
404 | } | |
405 | } | |
406 | ||
407 | unless ("@paks") { | |
408 | Pakfire::message("PAKFIRE ERROR: missing package name"); | |
409 | Pakfire::usage; | |
410 | exit 1; | |
411 | } | |
412 | ||
413 | foreach $pak (@paks) { | |
414 | my %metadata = Pakfire::getmetadata($pak, "latest"); | |
415 | ||
416 | ### Check if pakfile was actually found | |
417 | if ($metadata{'Installed'} eq "no" && $metadata{'Available'} eq "no") { | |
418 | Pakfire::message("PAKFIRE WARN: Pak '$pak' not found."); | |
419 | last; | |
420 | } | |
421 | ||
422 | unless (defined $metadata{'Available'}) { | |
423 | Pakfire::message("PAKFIRE WARN: Unable to retrieve latest metadata for $pak. Information may be outdated.") | |
424 | } | |
425 | ||
426 | ### Printout metadata in a user friendly format | |
427 | print "Name: $metadata{'Name'}\n"; | |
428 | print "Summary: $metadata{'Summary'}\n"; | |
429 | if ($metadata{'Available'} eq "yes") { | |
430 | print "Version: $metadata{'AvailableProgVersion'}-$metadata{'AvailableRelease'}\n"; | |
431 | } else { | |
432 | print "Version: $metadata{'ProgVersion'}-$metadata{'Release'}\n"; | |
433 | } | |
434 | print "Size: " . Pakfire::beautifysize("$metadata{'Size'}") . "\n"; | |
435 | print "Dependencies: $metadata{'Dependencies'}\n"; | |
436 | print "Pakfile: $metadata{'File'}\n"; | |
437 | print "Service InitScripts: $metadata{'Services'}\n"; | |
438 | print "Installed: $metadata{'Installed'}\n"; | |
439 | ### Generate a pak status message | |
440 | if (! defined $metadata{'Available'}) { | |
441 | print "Status: unknown (an error occured retrieving latest pak metadata)"; | |
442 | } elsif ($metadata{'Available'} eq "no") { | |
443 | print "Status: obsolete (version $metadata{'ProgVersion'}-$metadata{'Release'} is installed)\n"; | |
444 | } elsif ($metadata{'Installed'} eq "yes" && "$metadata{'Release'}" < "$metadata{'AvailableRelease'}") { | |
445 | print "Status: outdated (version $metadata{'ProgVersion'}-$metadata{'Release'} is installed)\n"; | |
446 | } elsif ($metadata{'Installed'} eq "yes") { | |
447 | print "Status: up-to-date\n"; | |
448 | } else { | |
449 | print "Status: not installed\n"; | |
450 | } | |
451 | print "\n"; | |
452 | } | |
453 | ||
5b2a12ff MT |
454 | } elsif ("$ARGV[0]" eq "resolvedeps") { |
455 | foreach (@ARGV) { | |
456 | next if ("$_" eq "resolvedeps"); | |
750c1528 | 457 | next if ("$_" =~ "^-"); |
5b2a12ff MT |
458 | &Pakfire::resolvedeps("$_"); |
459 | } | |
377560fb MT |
460 | } elsif ("$ARGV[0]" eq "enable") { |
461 | if ("$ARGV[1]" eq "updates") { | |
462 | system("ln -s ../../opt/pakfire/pakfire /etc/fcron.daily/pakfire-update"); | |
37610d7b | 463 | } elsif ("$ARGV[1]" eq "upgrades") { |
377560fb MT |
464 | system("ln -s ../../opt/pakfire/pakfire /etc/fcron.daily/pakfire-upgrade"); |
465 | } | |
466 | } elsif ("$ARGV[0]" eq "disable") { | |
467 | if ("$ARGV[1]" eq "updates") { | |
468 | system("rm -f /etc/fcron.daily/pakfire-update"); | |
37610d7b | 469 | } elsif ("$ARGV[1]" eq "upgrades") { |
377560fb MT |
470 | system("rm -f /etc/fcron.daily/pakfire-upgrade"); |
471 | } | |
090af02e | 472 | } elsif ("$ARGV[0]" eq "status") { |
074b5097 RR |
473 | my $exitcode = 0; |
474 | my %status = &Pakfire::status; | |
475 | ||
476 | print "Core-Version: $status{'CoreVersion'}\n"; | |
477 | print "Core-Update-Level: $status{'Release'}\n"; | |
478 | print "Last update: $status{'LastUpdate'} ago\n"; | |
479 | print "Last core-list update: $status{'LastCoreListUpdate'} ago\n"; | |
480 | print "Last server-list update: $status{'LastServerListUpdate'} ago\n"; | |
481 | print "Last packages-list update: $status{'LastPakListUpdate'} ago\n"; | |
482 | print "Core-Update available: $status{'CoreUpdateAvailable'}"; | |
483 | print " ($status{'AvailableRelease'})" if ("$status{'CoreUpdateAvailable'}" eq "yes"); | |
484 | print "\nPackage-Updates available: $status{'PakUpdatesAvailable'}\n"; | |
485 | print "Reboot required: $status{'RebootRequired'}\n"; | |
486 | ||
487 | $exitcode += 2 if ($status{'CoreUpdateAvailable'} eq "yes"); | |
488 | $exitcode += 3 if ($status{'PakUpdatesAvailable'} eq "yes"); | |
489 | $exitcode += 4 if ($status{'RebootRequired'} eq "yes"); | |
490 | exit $exitcode; | |
5b2a12ff MT |
491 | } else { |
492 | &Pakfire::usage; | |
1bd42c89 | 493 | } |
a6d327a7 | 494 | |
d6c2e671 | 495 | END { |
2b921b79 RR |
496 | &Pakfire::logger("PAKFIRE INFO: Pakfire has finished. Closing."); |
497 | ||
d6c2e671 SS |
498 | # Check if pakfire has been locked in this session. |
499 | if ($locked) { | |
500 | # Remove lockfile. | |
501 | unlink($Pakfire::lockfile); | |
502 | } | |
503 | } | |
504 | ||
70df8302 | 505 | exit 0; |