]> git.proxmox.com Git - pve-manager.git/blob - bin/pveupdate
buildsys: add %.1.pod make target to reduce duplication
[pve-manager.git] / bin / pveupdate
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use IO::File;
7 use File::Find;
8 use File::stat;
9
10 use PVE::INotify;
11 use PVE::Cluster;
12 use PVE::APLInfo;
13 use PVE::SafeSyslog;
14 use PVE::RPCEnvironment;
15 use PVE::API2::Subscription;
16 use PVE::API2::APT;
17
18 initlog ('pveupdate', 'daemon');
19
20 die "please run as root\n" if $> != 0;
21
22 $ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
23
24 PVE::INotify::inotify_init();
25
26 my $rpcenv = PVE::RPCEnvironment->init('cli');
27
28 $rpcenv->init_request();
29 $rpcenv->set_language($ENV{LANG});
30 $rpcenv->set_user('root@pam');
31
32 my $nodename = PVE::INotify::nodename();
33
34 eval { PVE::API2::Subscription->update({ node => $nodename }); };
35 if (my $err = $@) {
36 syslog ('err', "update subscription info failed: $err");
37 }
38
39 my $dccfg = PVE::Cluster::cfs_read_file('datacenter.cfg');
40 eval { PVE::APLInfo::update($dccfg->{http_proxy}); };
41 if (my $err = $@) {
42 syslog ('err', "update appliance info failed - see /var/log/pveam.log for details");
43 }
44
45 my $info = PVE::INotify::read_file('subscription');
46 # We assume that users with subscriptions want informations
47 # about new packages.
48 my $notify = ($info && $info->{status} eq 'Active') ? 1 : 0;
49 eval { PVE::API2::APT->update_database({ node => $nodename, notify => $notify, quiet => 1 }); };
50 if (my $err = $@) {
51 syslog ('err', "update apt database failed: $err");
52 }
53
54 sub cleanup_tasks {
55
56 my $taskdir = "/var/log/pve/tasks";
57 my $filename = "$taskdir/index.1";
58
59 my $fh = IO::File->new($filename, O_RDONLY);
60 return if !$fh;
61
62 my $endtime = 0;
63 while (defined(my $line = <$fh>)) {
64 if ($line =~ m/^(\S+)(\s([0-9A-Za-z]{8})(\s(\S.*))?)?$/) {
65 $endtime = hex($3);
66 last;
67 }
68 }
69 close($fh);
70
71 return if !$endtime;
72
73 # print "delete task older that $endtime\n" . localtime($endtime) . "\n";
74
75 my $count = 0;
76
77 my $wanted = sub {
78 my $filename = $_;
79
80 return if $filename !~ m/^UPID:/;
81
82 my $st;
83 if (($st = stat($filename)) && ($st->mtime < $endtime)) {
84 unlink($filename);
85 $count++;
86 }
87 };
88
89 foreach my $subdir (qw(0 1 2 3 4 5 6 7 8 9 A B C D E F)) {
90 my $path = "$taskdir/$subdir";
91 find($wanted, $path);
92 }
93
94 if ($count) {
95 syslog('info', "cleanup removed $count task logs");
96 }
97 }
98
99 cleanup_tasks();
100
101 exit (0);