]>
Commit | Line | Data |
---|---|---|
c3df33af | 1 | #!/usr/bin/perl |
c1ae1ad6 | 2 | |
1bd42c89 MT |
3 | require "/opt/pakfire/lib/functions.pl"; |
4 | ||
5 | my $interactive = 1; | |
6 | ||
a6d327a7 | 7 | &Pakfire::logger("PAKFIRE INFO: IPFire Pakfire $Conf::version started!"); |
cde0e116 | 8 | &Pakfire::checkcryptodb; |
c1ae1ad6 | 9 | |
1bd42c89 MT |
10 | ### Check if we are running as root |
11 | # | |
12 | my $user = qx(whoami); | |
13 | chomp($user); | |
14 | unless ( "$user" eq "root" ) { | |
a6d327a7 | 15 | &Pakfire::message("PAKFIRE ERROR: You must run pakfire as user root!"); |
1bd42c89 MT |
16 | exit 1; |
17 | } | |
18 | ||
06209efc MT |
19 | ### Check if we are started by another name |
20 | # | |
21 | if ( $0 =~ /pakfire-update$/ ) { | |
a6d327a7 | 22 | &Pakfire::message("CRON INFO: Running an update"); |
06209efc MT |
23 | $ARGV[0] = "update"; |
24 | $interactive = 0; | |
25 | } elsif ( $0 =~ /pakfire-upgrade$/ ) { | |
a6d327a7 | 26 | &Pakfire::message("CRON INFO: Running an upgrade"); |
06209efc MT |
27 | $ARGV[0] = "upgrade"; |
28 | $interactive = 0; | |
29 | } | |
30 | ||
1bd42c89 | 31 | unless (@ARGV) { |
5b2a12ff | 32 | &Pakfire::usage; |
1bd42c89 | 33 | } |
4b122800 MT |
34 | |
35 | foreach (@ARGV) { | |
36 | if ("$_" =~ "^-") { | |
37 | $interactive = 0 if ("$_" eq "--non-interactive"); | |
38 | $interactive = 0 if ("$_" eq "-y"); | |
39 | } | |
40 | } | |
c1ae1ad6 | 41 | |
1bd42c89 MT |
42 | if ("$ARGV[0]" eq "install") { |
43 | shift; | |
99e6df8e MT |
44 | |
45 | ### Make sure that the list is not outdated. | |
46 | &Pakfire::dbgetlist("noforce"); | |
47 | ||
48 | open(FILE, "<$Conf::dbdir/lists/packages_list.db"); | |
49 | my @db = <FILE>; | |
50 | close(FILE); | |
51 | ||
52 | my $dep; | |
a08c3a2e | 53 | my @deps; |
99e6df8e | 54 | my $pak; |
a08c3a2e MT |
55 | my @paks; |
56 | my @temp; | |
99e6df8e MT |
57 | my @templine; |
58 | my $found = 0; | |
186e3d2c | 59 | my $return; |
4b122800 | 60 | my @all; |
99e6df8e MT |
61 | foreach $pak (@ARGV) { |
62 | unless ("$pak" =~ "^-") { | |
186e3d2c MT |
63 | $return = &Pakfire::isinstalled($pak); |
64 | if ($return eq 0) { | |
a6d327a7 | 65 | &Pakfire::message("PAKFIRE INFO: $pak is already installed"); |
186e3d2c MT |
66 | next; |
67 | } | |
99e6df8e MT |
68 | $found = 0; |
69 | foreach (@db) { | |
70 | @templine = split(/;/,$_); | |
71 | if ("$templine[0]" eq "$pak" ) { | |
72 | push(@paks,$pak); | |
73 | push(@all,$pak); | |
74 | @temp = &Pakfire::resolvedeps("$pak"); | |
75 | foreach $dep (@temp) { | |
76 | push(@deps,$dep) if $dep; | |
77 | push(@all,$dep) if $dep; | |
78 | } | |
79 | $found = 1; | |
80 | break; | |
81 | } | |
82 | } | |
a6d327a7 MT |
83 | if ($found == 0) { |
84 | &Pakfire::message(""); | |
85 | &Pakfire::message("PAKFIRE WARN: The pak \"$pak\" is not known. Please try running \"pakfire update\"."); | |
86 | } | |
5b2a12ff | 87 | } |
a08c3a2e | 88 | } |
186e3d2c MT |
89 | |
90 | unless (@paks) { | |
a6d327a7 | 91 | &Pakfire::message("PAKFIRE ERROR: No packages to install. Exiting..."); |
186e3d2c MT |
92 | exit 1; |
93 | } | |
97520ed5 | 94 | |
186e3d2c MT |
95 | &Pakfire::message(""); |
96 | &Pakfire::message(""); | |
a6d327a7 | 97 | &Pakfire::message("PAKFIRE INFO: Packages to install:"); |
186e3d2c MT |
98 | foreach $pak (sort @paks) { |
99 | my $size = &Pakfire::getsize("$pak"); | |
1bd42c89 | 100 | $size = &Pakfire::beautifysize($size); |
35f38a8b | 101 | &Pakfire::message("PAKFIRE INFO: $pak \t - $size"); |
1bd42c89 MT |
102 | } |
103 | ||
186e3d2c MT |
104 | if (@deps) { |
105 | my %sort = map{ $_, 1 } @deps; | |
106 | @deps = sort keys %sort; | |
107 | &Pakfire::message(""); | |
a6d327a7 | 108 | &Pakfire::message("PAKFIRE INFO: Packages to install for dependencies:"); |
186e3d2c MT |
109 | } |
110 | foreach $dep (sort @deps) { | |
111 | my $size = &Pakfire::getsize("$dep"); | |
1bd42c89 | 112 | $size = &Pakfire::beautifysize($size); |
35f38a8b | 113 | &Pakfire::message("PAKFIRE INFO: $dep \t - $size"); |
1bd42c89 | 114 | } |
4b122800 MT |
115 | |
116 | my $totalsize; | |
186e3d2c MT |
117 | foreach $pak (@all) { |
118 | $totalsize = ($totalsize + &Pakfire::getsize("$pak")); | |
4b122800 | 119 | } |
1bd42c89 | 120 | $totalsize = &Pakfire::beautifysize($totalsize); |
186e3d2c | 121 | &Pakfire::message(""); |
a6d327a7 | 122 | &Pakfire::message("PAKFIRE INFO: Total size: \t ~ $totalsize"); |
186e3d2c | 123 | &Pakfire::message(""); |
1bd42c89 MT |
124 | |
125 | if ($interactive) { | |
a6d327a7 | 126 | &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); |
1bd42c89 MT |
127 | my $ret = <STDIN>; |
128 | chomp($ret); | |
a6d327a7 | 129 | &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); |
1bd42c89 | 130 | if ( $ret ne "y" ) { |
a6d327a7 | 131 | &Pakfire::message("PAKFIRE ERROR: Installation aborted."); |
1bd42c89 MT |
132 | exit 1; |
133 | } | |
a6d327a7 MT |
134 | } else { |
135 | &Pakfire::logger("PAKFIRE INFO: Interaction skipped."); | |
1bd42c89 | 136 | } |
186e3d2c MT |
137 | |
138 | my %sort = map{ $_, 1 } @all; | |
139 | @all = sort keys %sort; | |
a08c3a2e MT |
140 | |
141 | ### Download first | |
186e3d2c | 142 | foreach $pak (sort @all) { |
186e3d2c | 143 | &Pakfire::getpak("$pak", ""); |
a08c3a2e | 144 | } |
c1ae1ad6 | 145 | |
35f38a8b MT |
146 | &Pakfire::message(""); |
147 | ||
186e3d2c MT |
148 | foreach $pak (sort @all) { |
149 | &Pakfire::setuppak("$pak") if ($pak ne ""); | |
1bd42c89 | 150 | } |
1bd42c89 MT |
151 | |
152 | } elsif ("$ARGV[0]" eq "remove") { | |
e44b26cf MT |
153 | shift; |
154 | ||
155 | my @paks; | |
156 | my $pak; | |
157 | ||
158 | foreach $pak (@ARGV) { | |
159 | unless ("$pak" =~ "^-") { | |
160 | $return = &Pakfire::isinstalled($pak); | |
161 | if ($return ne 0) { | |
a6d327a7 | 162 | &Pakfire::message("PAKFIRE WARN: $pak is not installed"); |
e44b26cf MT |
163 | next; |
164 | } | |
165 | ||
166 | push(@paks, $pak); | |
167 | ||
168 | } | |
169 | } | |
170 | ||
171 | unless (@paks) { | |
a6d327a7 | 172 | &Pakfire::message("PAKFIRE ERROR: No packages to remove. Exiting..."); |
e44b26cf MT |
173 | exit 1; |
174 | } | |
175 | ||
176 | &Pakfire::message(""); | |
177 | &Pakfire::message(""); | |
35f38a8b | 178 | &Pakfire::message("PAKFIRE INFO: Packages to remove:"); |
e44b26cf MT |
179 | foreach $pak (sort @paks) { |
180 | my $size = &Pakfire::getsize("$pak"); | |
181 | $size = &Pakfire::beautifysize($size); | |
35f38a8b | 182 | &Pakfire::message("PAKFIRE INFO: $pak \t - $size"); |
e44b26cf MT |
183 | } |
184 | ||
185 | if ($interactive) { | |
35f38a8b | 186 | &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); |
e44b26cf MT |
187 | my $ret = <STDIN>; |
188 | chomp($ret); | |
35f38a8b | 189 | &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); |
e44b26cf | 190 | if ( $ret ne "y" ) { |
35f38a8b | 191 | &Pakfire::message("PAKFIRE ERROR: Installation aborted."); |
e44b26cf MT |
192 | exit 1; |
193 | } | |
194 | } | |
195 | ||
196 | foreach $pak (@paks) { | |
197 | &Pakfire::removepak("$pak"); | |
198 | } | |
1bd42c89 MT |
199 | |
200 | ||
201 | } elsif ("$ARGV[0]" eq "update") { | |
5b2a12ff | 202 | my $force = "noforce"; |
8e58bd37 MT |
203 | &Pakfire::makeuuid(); |
204 | &Pakfire::senduuid(); | |
c3df33af | 205 | &Pakfire::getmirrors(); |
5b2a12ff MT |
206 | $force = "force" if ("$ARGV[1]" eq "--force"); |
207 | &Pakfire::dbgetlist("$force"); | |
afabe9f7 | 208 | |
4b122800 MT |
209 | |
210 | } elsif ("$ARGV[0]" eq "upgrade") { | |
99e6df8e MT |
211 | my @upgradepaks = &Pakfire::dblist("upgrade", "noweb"); |
212 | my @temp; | |
213 | ||
214 | foreach (@upgradepaks) { | |
215 | @temp = &Pakfire::resolvedeps("$_"); | |
216 | foreach (@temp) { push(@upgradepaks,$_) if $_; } | |
217 | } | |
218 | ||
219 | if (@upgradepaks) { | |
220 | &Pakfire::message(""); | |
35f38a8b | 221 | &Pakfire::message("PAKFIRE UPGR: We are going to install all packages listed above."); |
99e6df8e | 222 | if ($interactive) { |
35f38a8b | 223 | &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]"); |
99e6df8e MT |
224 | my $ret = <STDIN>; |
225 | chomp($ret); | |
35f38a8b | 226 | &Pakfire::logger("PAKFIRE INFO: Answer: $ret"); |
99e6df8e | 227 | if ( $ret ne "y" ) { |
35f38a8b | 228 | &Pakfire::message("PAKFIRE ERROR: Installation aborted."); |
99e6df8e MT |
229 | exit 1; |
230 | } | |
231 | } | |
232 | } | |
233 | ||
234 | ### Download first | |
235 | foreach (sort @upgradepaks) { | |
99e6df8e MT |
236 | &Pakfire::getpak("$_", ""); |
237 | } | |
238 | ||
239 | foreach (sort @upgradepaks) { | |
240 | &Pakfire::upgradepak("$_"); | |
241 | } | |
4b122800 | 242 | |
afabe9f7 | 243 | } elsif ("$ARGV[0]" eq "list") { |
5b2a12ff MT |
244 | &Pakfire::dblist("all", "noweb"); |
245 | ||
246 | } elsif ("$ARGV[0]" eq "resolvedeps") { | |
247 | foreach (@ARGV) { | |
248 | next if ("$_" eq "resolvedeps"); | |
249 | &Pakfire::resolvedeps("$_"); | |
250 | } | |
5b2a12ff MT |
251 | } else { |
252 | &Pakfire::usage; | |
1bd42c89 | 253 | } |
a6d327a7 | 254 | |
35f38a8b MT |
255 | &Pakfire::logger("PAKFIRE INFO: Pakfire has finished. Closing."); |
256 | ||
99e6df8e | 257 | exit 0; |