]> git.ipfire.org Git - ipfire-2.x.git/blob - src/pakfire/pakfire
Pakfire ist jetzt bunt und schoen zu bedienen.
[ipfire-2.x.git] / src / pakfire / pakfire
1 #!/usr/bin/perl
2
3 require "/opt/pakfire/lib/functions.pl";
4
5 my $interactive = 1;
6
7 &Pakfire::logger("PAKFIRE INFO: IPFire Pakfire $Conf::version started!");
8 &Pakfire::checkcryptodb;
9
10 ### Check if we are running as root
11 #
12 my $user = qx(whoami);
13 chomp($user);
14 unless ( "$user" eq "root" ) {
15 &Pakfire::message("PAKFIRE ERROR: You must run pakfire as user root!");
16 exit 1;
17 }
18
19 ### Check if we are started by another name
20 #
21 if ( $0 =~ /pakfire-update$/ ) {
22 &Pakfire::message("CRON INFO: Running an update");
23 $ARGV[0] = "update";
24 $interactive = 0;
25 } elsif ( $0 =~ /pakfire-upgrade$/ ) {
26 &Pakfire::message("CRON INFO: Running an upgrade");
27 $ARGV[0] = "upgrade";
28 $interactive = 0;
29 }
30
31 unless (@ARGV) {
32 &Pakfire::usage;
33 }
34
35 foreach (@ARGV) {
36 if ("$_" =~ "^-") {
37 $interactive = 0 if ("$_" eq "--non-interactive");
38 $interactive = 0 if ("$_" eq "-y");
39 }
40 }
41
42 if ("$ARGV[0]" eq "install") {
43 shift;
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;
53 my @deps;
54 my $pak;
55 my @paks;
56 my @temp;
57 my @templine;
58 my $found = 0;
59 my $return;
60 my @all;
61 foreach $pak (@ARGV) {
62 unless ("$pak" =~ "^-") {
63 $return = &Pakfire::isinstalled($pak);
64 if ($return eq 0) {
65 &Pakfire::message("PAKFIRE INFO: $pak is already installed");
66 next;
67 }
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 }
83 if ($found == 0) {
84 &Pakfire::message("");
85 &Pakfire::message("PAKFIRE WARN: The pak \"$pak\" is not known. Please try running \"pakfire update\".");
86 }
87 }
88 }
89
90 unless (@paks) {
91 &Pakfire::message("PAKFIRE ERROR: No packages to install. Exiting...");
92 exit 1;
93 }
94
95 &Pakfire::message("");
96 &Pakfire::message("");
97 &Pakfire::message("PAKFIRE INFO: Packages to install:");
98 foreach $pak (sort @paks) {
99 my $size = &Pakfire::getsize("$pak");
100 $size = &Pakfire::beautifysize($size);
101 &Pakfire::message("PAKFIRE INFO: $pak \t - $size");
102 }
103
104 if (@deps) {
105 my %sort = map{ $_, 1 } @deps;
106 @deps = sort keys %sort;
107 &Pakfire::message("");
108 &Pakfire::message("PAKFIRE INFO: Packages to install for dependencies:");
109 }
110 foreach $dep (sort @deps) {
111 my $size = &Pakfire::getsize("$dep");
112 $size = &Pakfire::beautifysize($size);
113 &Pakfire::message("PAKFIRE INFO: $dep \t - $size");
114 }
115
116 my $totalsize;
117 foreach $pak (@all) {
118 $totalsize = ($totalsize + &Pakfire::getsize("$pak"));
119 }
120 $totalsize = &Pakfire::beautifysize($totalsize);
121 &Pakfire::message("");
122 &Pakfire::message("PAKFIRE INFO: Total size: \t ~ $totalsize");
123 &Pakfire::message("");
124
125 if ($interactive) {
126 &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]");
127 my $ret = <STDIN>;
128 chomp($ret);
129 &Pakfire::logger("PAKFIRE INFO: Answer: $ret");
130 if ( $ret ne "y" ) {
131 &Pakfire::message("PAKFIRE ERROR: Installation aborted.");
132 exit 1;
133 }
134 } else {
135 &Pakfire::logger("PAKFIRE INFO: Interaction skipped.");
136 }
137
138 my %sort = map{ $_, 1 } @all;
139 @all = sort keys %sort;
140
141 ### Download first
142 foreach $pak (sort @all) {
143 &Pakfire::getpak("$pak", "");
144 }
145
146 &Pakfire::message("");
147
148 foreach $pak (sort @all) {
149 &Pakfire::setuppak("$pak") if ($pak ne "");
150 }
151
152 } elsif ("$ARGV[0]" eq "remove") {
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) {
162 &Pakfire::message("PAKFIRE WARN: $pak is not installed");
163 next;
164 }
165
166 push(@paks, $pak);
167
168 }
169 }
170
171 unless (@paks) {
172 &Pakfire::message("PAKFIRE ERROR: No packages to remove. Exiting...");
173 exit 1;
174 }
175
176 &Pakfire::message("");
177 &Pakfire::message("");
178 &Pakfire::message("PAKFIRE INFO: Packages to remove:");
179 foreach $pak (sort @paks) {
180 my $size = &Pakfire::getsize("$pak");
181 $size = &Pakfire::beautifysize($size);
182 &Pakfire::message("PAKFIRE INFO: $pak \t - $size");
183 }
184
185 if ($interactive) {
186 &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]");
187 my $ret = <STDIN>;
188 chomp($ret);
189 &Pakfire::logger("PAKFIRE INFO: Answer: $ret");
190 if ( $ret ne "y" ) {
191 &Pakfire::message("PAKFIRE ERROR: Installation aborted.");
192 exit 1;
193 }
194 }
195
196 foreach $pak (@paks) {
197 &Pakfire::removepak("$pak");
198 }
199
200
201 } elsif ("$ARGV[0]" eq "update") {
202 my $force = "noforce";
203 &Pakfire::makeuuid();
204 &Pakfire::senduuid();
205 &Pakfire::getmirrors();
206 $force = "force" if ("$ARGV[1]" eq "--force");
207 &Pakfire::dbgetlist("$force");
208
209
210 } elsif ("$ARGV[0]" eq "upgrade") {
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("");
221 &Pakfire::message("PAKFIRE UPGR: We are going to install all packages listed above.");
222 if ($interactive) {
223 &Pakfire::message("PAKFIRE INFO: Is this okay? [y/N]");
224 my $ret = <STDIN>;
225 chomp($ret);
226 &Pakfire::logger("PAKFIRE INFO: Answer: $ret");
227 if ( $ret ne "y" ) {
228 &Pakfire::message("PAKFIRE ERROR: Installation aborted.");
229 exit 1;
230 }
231 }
232 }
233
234 ### Download first
235 foreach (sort @upgradepaks) {
236 &Pakfire::getpak("$_", "");
237 }
238
239 foreach (sort @upgradepaks) {
240 &Pakfire::upgradepak("$_");
241 }
242
243 } elsif ("$ARGV[0]" eq "list") {
244 &Pakfire::dblist("all", "noweb");
245
246 } elsif ("$ARGV[0]" eq "resolvedeps") {
247 foreach (@ARGV) {
248 next if ("$_" eq "resolvedeps");
249 &Pakfire::resolvedeps("$_");
250 }
251 } else {
252 &Pakfire::usage;
253 }
254
255 &Pakfire::logger("PAKFIRE INFO: Pakfire has finished. Closing.");
256
257 exit 0;