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