3 ## Copyright 2011 Simone Sclavi 'Ito'
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 use feature
qw(say switch);
21 use Getopt
::Long
qw(:config no_ignore_case);
24 use GnuPG
qw( :algo );
29 my ($url, $file) = @_;
30 $browser = LWP
::UserAgent
->new unless $browser;
31 $browser->timeout(30);
32 $browser->show_progress(1);
33 $browser->env_proxy( );
34 my $resp = $browser->get($url, ':content_file' => $file);
35 return $resp->is_success;
38 { language
=> 'Afrikaans (South Africa)', code
=> 'af' },
39 { language
=> 'Akan', code
=> 'ak' },
40 { language
=> 'Aarabic', code
=> 'ar' },
41 { language
=> 'Asturian', code
=> 'ast' },
42 { language
=> 'Belarusian', code
=> 'be' },
43 { language
=> 'Bulgarian', code
=> 'bg' },
44 { language
=> 'Bengali (Bangladesh)', code
=> 'bn-BD' },
45 { language
=> 'Bengali (India)', code
=> 'bn-IN' },
46 { language
=> 'Breton', code
=> 'br' },
47 { language
=> 'Bosnian', code
=> 'bs' },
48 { language
=> 'Catalan', code
=> 'ca' },
49 { language
=> 'Czech', code
=> 'cs' },
50 { language
=> 'Kashubian', code
=> 'csb' },
51 { language
=> 'Welsh', code
=> 'cy' },
52 { language
=> 'Danish', code
=> 'da' },
53 { language
=> 'German', code
=> 'de' },
54 { language
=> 'Greek', code
=> 'el' },
55 { language
=> 'English (United Kingdom)', code
=> 'en-GB' },
56 { language
=> 'English (US)', code
=> 'en-US' },
57 { language
=> 'English (South African)', code
=> 'en-ZA' },
58 { language
=> 'Esperanto', code
=> 'eo' },
59 { language
=> 'Spanish (Argentina)', code
=> 'es-AR' },
60 { language
=> 'Spanish (Chile)', code
=> 'es-CL' },
61 { language
=> 'Spanish (Spain)', code
=> 'es-ES' },
62 { language
=> 'Spanish (Mexico)', code
=> 'es-MX' },
63 { language
=> 'Estonian', code
=> 'et' },
64 { language
=> 'Basque', code
=> 'eu' },
65 { language
=> 'Persian', code
=> 'fa' },
66 { language
=> 'Finnish', code
=> 'fi' },
67 { language
=> 'French', code
=> 'fr' },
68 { language
=> 'Frisian', code
=> 'fy-NL' },
69 { language
=> 'Irish', code
=> 'ga-IE' },
70 { language
=> 'Gaelic (Scotland)', code
=> 'gd' },
71 { language
=> 'Galician', code
=> 'gl' },
72 { language
=> 'Gujarati (India)', code
=> 'gu-IN' },
73 { language
=> 'Hebrew', code
=> 'he' },
74 { language
=> 'Hindi', code
=> 'hi-IN' },
75 { language
=> 'Croatian', code
=> 'hr' },
76 { language
=> 'Hungarian', code
=> 'hu' },
77 { language
=> 'Armenian', code
=> 'hy-AM' },
78 { language
=> 'Indonesian', code
=> 'id' },
79 { language
=> 'Icelandic', code
=> 'is' },
80 { language
=> 'Italian', code
=> 'it' },
81 { language
=> 'Japanese', code
=> 'ja' },
82 { language
=> 'Kazakh', code
=> 'kk' },
83 { language
=> 'Kannada', code
=> 'kn' },
84 { language
=> 'Korean', code
=> 'ko' },
85 { language
=> 'Kurdish', code
=> 'ku' },
86 { language
=> 'Ganda', code
=> 'lg' },
87 { language
=> 'Lithuanian', code
=> 'lt' },
88 { language
=> 'Latvian', code
=> 'lv' },
89 { language
=> 'Maithili', code
=> 'mai' },
90 { language
=> 'Macedonian', code
=> 'mk' },
91 { language
=> 'Malayalam', code
=> 'ml' },
92 { language
=> 'Mongolian', code
=> 'mn' },
93 { language
=> 'Marathi', code
=> 'mr' },
94 { language
=> 'Norwegian (Bokmal)', code
=> 'nb-NO' },
95 { language
=> 'Dutch', code
=> 'nl' },
96 { language
=> 'Norwegian (Nynorsk)', code
=> 'nn-NO' },
97 { language
=> 'Northern Sotho', code
=> 'nso' },
98 { language
=> 'Oriya', code
=> 'or' },
99 { language
=> 'Punjabi', code
=> 'pa-IN' },
100 { language
=> 'Polish', code
=> 'pl' },
101 { language
=> 'Portuguese (Brazil)', code
=> 'pt-BR' },
102 { language
=> 'Portuguese (Portugal)', code
=> 'pt-PT' },
103 { language
=> 'Romansh', code
=> 'rm' },
104 { language
=> 'Romanian', code
=> 'ro' },
105 { language
=> 'Russian', code
=> 'ru' },
106 { language
=> 'Sinhalese', code
=> 'si' },
107 { language
=> 'Slovak', code
=> 'sk' },
108 { language
=> 'Slovenian', code
=> 'sl' },
109 { language
=> 'Songhai', code
=> 'son' },
110 { language
=> 'Albanian', code
=> 'sq' },
111 { language
=> 'Serbian', code
=> 'sr' },
112 { language
=> 'Swedish', code
=> 'sv-SE' },
113 { language
=> 'Swahili', code
=> 'sw' },
114 { language
=> 'Tamil', code
=> 'ta' },
115 { language
=> 'Tamil (Sri Lanka)', code
=> 'ta-LK' },
116 { language
=> 'Telugu', code
=> 'te' },
117 { language
=> 'Thai', code
=> 'th' },
118 { language
=> 'Turkish', code
=> 'tr' },
119 { language
=> 'Ukrainan', code
=> 'uk' },
120 { language
=> 'Vietnamese', code
=> 'vi' },
121 { language
=> 'Chinese (Simplified)', code
=> 'zh-CN' },
122 { language
=> 'Chinese (Traditional)', code
=> 'zh-TW' },
123 { language
=> 'Zulu', code
=> 'zu' },
127 { language
=> 'Aarabic', code
=> 'ar' },
128 { language
=> 'Asturian', code
=> 'ast' },
129 { language
=> 'Belarusian', code
=> 'be' },
130 { language
=> 'Bulgarian', code
=> 'bg' },
131 { language
=> 'Bengali (Bangladesh)', code
=> 'bn-BD' },
132 { language
=> 'Breton', code
=> 'br' },
133 { language
=> 'Catalan', code
=> 'ca' },
134 { language
=> 'Czech', code
=> 'cs' },
135 { language
=> 'Danish', code
=> 'da' },
136 { language
=> 'German', code
=> 'de' },
137 { language
=> 'Greek', code
=> 'el' },
138 { language
=> 'English (United Kingdom)', code
=> 'en-GB' },
139 { language
=> 'English (US)', code
=> 'en-US' },
140 { language
=> 'Spanish (Argentina)', code
=> 'es-AR' },
141 { language
=> 'Spanish (Spain)', code
=> 'es-ES' },
142 { language
=> 'Estonian', code
=> 'et' },
143 { language
=> 'Basque', code
=> 'eu' },
144 { language
=> 'Finnish', code
=> 'fi' },
145 { language
=> 'French', code
=> 'fr' },
146 { language
=> 'Frisian', code
=> 'fy-NL' },
147 { language
=> 'Irish', code
=> 'ga-IE' },
148 { language
=> 'Gaelic (Scotland)', code
=> 'gd' },
149 { language
=> 'Galician', code
=> 'gl' },
150 { language
=> 'Hebrew', code
=> 'he' },
151 { language
=> 'Hungarian', code
=> 'hu' },
152 { language
=> 'Indonesian', code
=> 'id' },
153 { language
=> 'Icelandic', code
=> 'is' },
154 { language
=> 'Italian', code
=> 'it' },
155 { language
=> 'Japanese', code
=> 'ja' },
156 { language
=> 'Korean', code
=> 'ko' },
157 { language
=> 'Lithuanian', code
=> 'lt' },
158 { language
=> 'Norwegian (Bokmal)', code
=> 'nb-NO' },
159 { language
=> 'Dutch', code
=> 'nl' },
160 { language
=> 'Norwegian (Nynorsk)', code
=> 'nn-NO' },
161 { language
=> 'Punjabi', code
=> 'pa-IN' },
162 { language
=> 'Polish', code
=> 'pl' },
163 { language
=> 'Portuguese (Brazil)', code
=> 'pt-BR' },
164 { language
=> 'Portuguese (Portugal)', code
=> 'pt-PT' },
165 { language
=> 'Romansh', code
=> 'rm' },
166 { language
=> 'Romanian', code
=> 'ro' },
167 { language
=> 'Russian', code
=> 'ru' },
168 { language
=> 'Sinhalese', code
=> 'si' },
169 { language
=> 'Slovak', code
=> 'sk' },
170 { language
=> 'Slovenian', code
=> 'sl' },
171 { language
=> 'Albanian', code
=> 'sq' },
172 { language
=> 'Serbian', code
=> 'sr' },
173 { language
=> 'Swedish', code
=> 'sv-SE' },
174 { language
=> 'Tamil (Sri Lanka)', code
=> 'ta-LK' },
175 { language
=> 'Turkish', code
=> 'tr' },
176 { language
=> 'Ukrainan', code
=> 'uk' },
177 { language
=> 'Vietnamese', code
=> 'vi' },
178 { language
=> 'Chinese (Simplified)', code
=> 'zh-CN' },
179 { language
=> 'Chinese (Traditional)', code
=> 'zh-TW' },
182 my ($VER, $PACKAGE, @u_i18n);
183 my $pkg = 'ff'; #default value for "--package"
184 my $res = GetOptions
("version|v=s" => \
$VER,
185 "package|p=s" => \
$pkg );
187 die ":: usage: $0 -p|--package=<package name [ff|tb]> -v|--version=<version number>\n" unless $res and (scalar @ARGV == 0);
190 when ('ff') { $PACKAGE = 'firefox'; @u_i18n = @ff_i18n; }
191 when ('tb') { $PACKAGE = 'thunderbird'; @u_i18n = @tb_i18n }
192 default { die qq{:: "$pkg" is
not a valid value
for "--package"! Please
use "ff" or "tb"\n}}
194 die qq{:: "--version" option is mandatory
!\n} unless $VER;
198 my @i18n = sort { $a->{language
} cmp $b->{language
} } @u_i18n;
199 my $size = scalar @i18n;
201 for (my $i = 0; $i < $size; $i++ )
203 say '[', $i + 1, "] $i18n[$i]{language}";
206 print "\n:: please select your language (type corresponding number)\n> ";
208 while ( $choice = <STDIN
> )
214 last if $choice ~~ [ 1 .. $size ];
215 print ":: WRONG SELECTION!\n:: please select your language (type corresponding number)\n> ";
217 say ":: \"$i18n[$choice - 1]{language}\" selected";
221 $| = 1; # turn on autoflush;
223 my $ff_path = "/pub/${PACKAGE}/releases/${VER}/linux-${ARCH}/${i18n[$choice -1]{code}}/${PACKAGE}-${VER}.tar.bz2";
224 my $ff_url = URI
->new('ftp://ftp.mozilla.org');
225 $ff_url->path($ff_path);
227 ##Downloading firefox##
228 get_url
( $ff_url, "${PACKAGE}-${VER}.tar.bz2" ) or die qq(:: ERROR
- can
't download "${PACKAGE}-${VER}.tar.bz2"\n);
230 ##downloading signature##
231 $ff_url->path("${ff_path}.asc");
232 get_url( $ff_url, "$PACKAGE-${VER}.tar.bz2.asc" ) or die qq(:: ERROR - can't download
"${PACKAGE}-${VER}.tar.bz2.asc"\n);
234 ##downloading public key
235 $ff_url->path("pub/${PACKAGE}/releases/${VER}/KEY");
236 get_url
( $ff_url, "KEY" ) or die qq(:: ERROR
- can
't download 'KEY
'\n);
238 print ':: verifying gnupg signature
... ';
239 my $gpg = new GnuPG();
240 $gpg->import_keys( keys => 'KEY
');
241 $gpg->verify ( signature => "${PACKAGE}-${VER}.tar.bz2.asc", file => "${PACKAGE}-${VER}.tar.bz2");