Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100755 441 lines (381 sloc) 13.635 kb
2db7970 @mrash install.pl
authored
1 #!/usr/bin/perl -w
2 #
3 ####################################################################
4 #
5 # File: install.pl
6 #
7 # Purpose: To install gpgdir on a Linux system.
8 #
4bd0e5a @mrash updated to cipherdyne.org
authored
9 # Author: Michael Rash (mbr@cipherdyne.org)
2db7970 @mrash install.pl
authored
10 #
198baf2 @mrash added locale setting and --Exclude option
authored
11 # Copyright (C) 2002-2008 Michael Rash (mbr@cipherdyne.org)
96005ba @mrash -Added Copyright line
authored
12 #
2db7970 @mrash install.pl
authored
13 # License (GNU Public License):
14 #
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
19 #
20 # You should have received a copy of the GNU General Public License
21 # along with this program; if not, write to the Free Software
22 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23 # USA
24 #
25 ####################################################################
26 #
27 # $Id$
28 #
29
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
30 use Cwd;
2db7970 @mrash install.pl
authored
31 use File::Copy;
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
32 use Getopt::Long;
2db7970 @mrash install.pl
authored
33 use strict;
34
35 #======================= config =======================
36 my $install_dir = '/usr/bin';
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
37 my $libdir = '/usr/lib/gpgdir';
38 my $manpage = 'gpgdir.1';
2db7970 @mrash install.pl
authored
39
d481367 @mrash non-root user installation support, and Cygwin support
authored
40 ### only used it $ENV{'HOME'} is not set for some reason
41 my $config_homedir = '';
42
2db7970 @mrash install.pl
authored
43 ### system binaries
44 my $gzipCmd = '/usr/bin/gzip';
c5fbee1 @mrash added checks for uid root and GnuPG
authored
45 my $perlCmd = '/usr/bin/perl';
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
46 my $makeCmd = '/usr/bin/make';
2db7970 @mrash install.pl
authored
47 #===================== end config =====================
48
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
49 my $print_help = 0;
50 my $uninstall = 0;
198baf2 @mrash added locale setting and --Exclude option
authored
51 my $force_mod_re = '';
52 my $exclude_mod_re = '';
96005ba @mrash -Added Copyright line
authored
53 my $skip_module_install = 0;
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
54 my $cmdline_force_install = 0;
198baf2 @mrash added locale setting and --Exclude option
authored
55 my $locale = 'C'; ### default LC_ALL env variable
56 my $no_locale = 0;
c5fbee1 @mrash added checks for uid root and GnuPG
authored
57
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
58 my %cmds = (
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
59 'gzip' => $gzipCmd,
60 'perl' => $perlCmd,
61 'make' => $makeCmd
62 );
63
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
64 ### map perl modules to versions
65 my %required_perl_modules = (
66 'Class::MethodMaker' => {
96005ba @mrash -Added Copyright line
authored
67 'force-install' => 0,
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
68 'mod-dir' => 'Class-MethodMaker'
69 },
70 'GnuPG::Interface' => {
96005ba @mrash -Added Copyright line
authored
71 'force-install' => 0,
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
72 'mod-dir' => 'GnuPG-Interface'
73 },
74 'Term::ReadKey' => {
96005ba @mrash -Added Copyright line
authored
75 'force-install' => 0,
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
76 'mod-dir' => 'TermReadKey'
77 }
78 );
79
96005ba @mrash -Added Copyright line
authored
80 ### make Getopts case sensitive
81 Getopt::Long::Configure('no_ignore_case');
82
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
83 &usage(1) unless (GetOptions(
84 'force-mod-install' => \$cmdline_force_install, ### force install of all modules
198baf2 @mrash added locale setting and --Exclude option
authored
85 'Force-mod-regex=s' => \$force_mod_re, ### force specific mod install with regex
86 'Exclude-mod-regex=s' => \$exclude_mod_re, ### exclude a particular perl module
96005ba @mrash -Added Copyright line
authored
87 'Skip-mod-install' => \$skip_module_install,
d481367 @mrash non-root user installation support, and Cygwin support
authored
88 'home-dir=s' => \$config_homedir, ### force a specific home dir
198baf2 @mrash added locale setting and --Exclude option
authored
89 'LC_ALL=s' => \$locale,
90 'no-LC_ALL' => \$no_locale,
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
91 'uninstall' => \$uninstall, # Uninstall gpgdir.
92 'help' => \$print_help # Display help.
93 ));
94 &usage(0) if $print_help;
95
198baf2 @mrash added locale setting and --Exclude option
authored
96 ### set LC_ALL env variable
97 $ENV{'LC_ALL'} = $locale unless $no_locale;
98
99 $force_mod_re = qr|$force_mod_re| if $force_mod_re;
100 $exclude_mod_re = qr|$exclude_mod_re| if $exclude_mod_re;
101
d481367 @mrash non-root user installation support, and Cygwin support
authored
102 ### check to see if we are installing in a Cygwin environment
80ed4cb @mrash bugfix to not force non-root installs
authored
103 my $non_root_user = 0;
d481367 @mrash non-root user installation support, and Cygwin support
authored
104 if (&is_cygwin()) {
105
106 print
107 "[+] It looks like you are installing gpgdir in a Cygwin environment.\n";
108 $non_root_user = 1;
109
110 } else {
111
112 unless ($< == 0 && $> == 0) {
113 print
114 "[+] It looks like you are installing gpgdir as a non-root user, so gpgdir\n",
42dc6cb @mrash updated to not install man page if gpgdir is installed by a non-root use...
authored
115 " will be installed in your local home directory.\n\n";
d481367 @mrash non-root user installation support, and Cygwin support
authored
116
117 $non_root_user = 1;
118 }
119 }
120
121 if ($non_root_user) {
122
123 ### we are installing as a normal user instead of root, so see
124 ### if it is ok to install within the user's home directory
125 my $homedir = '';
126 if ($config_homedir) {
127 $homedir = $config_homedir;
128 } else {
129 $homedir = $ENV{'HOME'} or die '[*] Could not get home ',
130 "directory, set the $config_homedir var.";
131 }
132
133 print
42dc6cb @mrash updated to not install man page if gpgdir is installed by a non-root use...
authored
134 " gpgdir will be installed at $homedir/bin/gpgdir, and a few\n",
d481367 @mrash non-root user installation support, and Cygwin support
authored
135 " perl modules needed by gpgdir will be installed in $homedir/lib/gpgdir/.\n\n",
136
42dc6cb @mrash updated to not install man page if gpgdir is installed by a non-root use...
authored
137 mkdir "$homedir/lib" unless -d "$homedir/lib";
138 $libdir = "$homedir/lib/gpgdir";
d481367 @mrash non-root user installation support, and Cygwin support
authored
139 $install_dir = "$homedir/bin";
140 }
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
141
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
142 ### make sure we can find the system binaries
143 ### in the expected locations.
144 &check_commands();
145
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
146 my $src_dir = getcwd() or die "[*] Could not get current working directory.";
147
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
148 ### create directories, make sure executables exist, etc.
149 &setup();
150
b5e2f1d @mrash updated to [+] and related prefixes
authored
151 print "[+] Installing gpgdir in $install_dir\n";
2db7970 @mrash install.pl
authored
152 &install_gpgdir();
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
153
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
154 ### install perl modules
96005ba @mrash -Added Copyright line
authored
155 unless ($skip_module_install) {
156 for my $module (keys %required_perl_modules) {
157 &install_perl_module($module);
158 }
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
159 }
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
160
b5e2f1d @mrash updated to [+] and related prefixes
authored
161 print "[+] Installing man page.\n";
2db7970 @mrash install.pl
authored
162 &install_manpage();
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
163
42dc6cb @mrash updated to not install man page if gpgdir is installed by a non-root use...
authored
164 print "[+] gpgdir has been installed!\n";
2db7970 @mrash install.pl
authored
165
166 exit 0;
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
167 #===================== end main =======================
2db7970 @mrash install.pl
authored
168
169 sub install_gpgdir() {
b5e2f1d @mrash updated to [+] and related prefixes
authored
170 die "[*] gpgdir does not exist. Download gpgdir from " .
4bd0e5a @mrash updated to cipherdyne.org
authored
171 "http://www.cipherdyne.org/gpgdir" unless -e 'gpgdir';
b5e2f1d @mrash updated to [+] and related prefixes
authored
172 copy 'gpgdir', "${install_dir}/gpgdir" or die "[*] Could not copy " .
2db7970 @mrash install.pl
authored
173 "gpgdir to $install_dir: $!";
d481367 @mrash non-root user installation support, and Cygwin support
authored
174
175 if ($non_root_user) {
176 open F, "< ${install_dir}/gpgdir" or die "[*] Could not open ",
177 "${install_dir}/gpgdir: $!";
178 my @lines = <F>;
179 close F;
180 open P, "> ${install_dir}/gpgdir.tmp" or die "[*] Could not open ",
181 "${install_dir}/gpgdir.tmp: $!";
182 for my $line (@lines) {
183 ### change the lib dir to new homedir path
184 if ($line =~ m|^\s*use\s+lib\s+\'/usr/lib/gpgdir\';|) {
185 print P "use lib '", $libdir, "';\n";
186 } else {
187 print P $line;
188 }
189 }
190 close P;
191 move "${install_dir}/gpgdir.tmp", "${install_dir}/gpgdir" or
192 die "[*] Could not move ${install_dir}/gpgdir.tmp -> ",
193 "${install_dir}/gpgdir: $!";
194
195 chmod 0700, "${install_dir}/gpgdir" or die "[*] Could not set " .
196 "permissions on gpgdir to 0755";
197 } else {
198 chmod 0755, "${install_dir}/gpgdir" or die "[*] Could not set " .
199 "permissions on gpgdir to 0755";
200 chown 0, 0, "${install_dir}/gpgdir" or
201 die "[*] Could not chown 0,0,${install_dir}/gpgdir: $!";
202 }
2db7970 @mrash install.pl
authored
203 return;
204 }
205
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
206 sub install_perl_module() {
207 my $mod_name = shift;
208
96005ba @mrash -Added Copyright line
authored
209 die '[*] Missing force-install key in required_perl_modules hash.'
210 unless defined $required_perl_modules{$mod_name}{'force-install'};
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
211 die '[*] Missing mod-dir key in required_perl_modules hash.'
212 unless defined $required_perl_modules{$mod_name}{'mod-dir'};
213
198baf2 @mrash added locale setting and --Exclude option
authored
214 if ($exclude_mod_re and $exclude_mod_re =~ /$mod_name/) {
215 print "[+] Excluding installation of $mod_name module.\n";
216 return;
217 }
218
96005ba @mrash -Added Copyright line
authored
219 my $version = '(NA)';
220
221 my $mod_dir = $required_perl_modules{$mod_name}{'mod-dir'};
222
223 if (-e "$mod_dir/VERSION") {
224 open F, "< $mod_dir/VERSION" or
225 die "[*] Could not open $mod_dir/VERSION: $!";
226 $version = <F>;
227 close F;
228 chomp $version;
229 } else {
230 print "[-] Warning: VERSION file does not exist in $mod_dir\n";
231 }
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
232
233 my $install_module = 0;
234
96005ba @mrash -Added Copyright line
authored
235 if ($required_perl_modules{$mod_name}{'force-install'}
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
236 or $cmdline_force_install) {
237 ### install regardless of whether the module may already be
96005ba @mrash -Added Copyright line
authored
238 ### installed
239 $install_module = 1;
198baf2 @mrash added locale setting and --Exclude option
authored
240 } elsif ($force_mod_re and $force_mod_re =~ /$mod_name/) {
96005ba @mrash -Added Copyright line
authored
241 print "[+] Forcing installation of $mod_name module.\n";
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
242 $install_module = 1;
243 } else {
244 if (has_perl_module($mod_name)) {
245 print "[+] Module $mod_name is already installed in the ",
246 "system perl tree, skipping.\n";
247 } else {
42dc6cb @mrash updated to not install man page if gpgdir is installed by a non-root use...
authored
248 ### install the module in the /usr/lib/gpgdir directory because
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
249 ### it is not already installed.
250 $install_module = 1;
251 }
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
252 }
253
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
254 if ($install_module) {
255 unless (-d $libdir) {
256 print "[+] Creating $libdir\n";
257 mkdir $libdir, 0755 or die "[*] Could not mkdir $libdir: $!";
258 }
96005ba @mrash -Added Copyright line
authored
259 print "[+] Installing the $mod_name $version perl " .
260 "module in $libdir/\n";
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
261 my $mod_dir = $required_perl_modules{$mod_name}{'mod-dir'};
262 chdir $mod_dir or die "[*] Could not chdir to ",
263 "$mod_dir: $!";
264 unless (-e 'Makefile.PL') {
265 die "[*] Your $mod_name source directory appears to be incomplete!\n",
266 " Download the latest sources from ",
96005ba @mrash -Added Copyright line
authored
267 "http://www.cipherdyne.org/\n";
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
268 }
269 system "$cmds{'make'} clean" if -e 'Makefile';
270 system "$cmds{'perl'} Makefile.PL PREFIX=$libdir LIB=$libdir";
271 system $cmds{'make'};
272 # system "$cmds{'make'} test";
273 system "$cmds{'make'} install";
274 chdir $src_dir or die "[*] Could not chdir $src_dir: $!";
275
276 print "\n\n";
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
277 }
278 return;
279 }
280
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
281 sub has_perl_module() {
282 my $module = shift;
283
284 # 5.8.0 has a bug with require Foo::Bar alone in an eval, so an
285 # extra statement is a workaround.
286 my $file = "$module.pm";
287 $file =~ s{::}{/}g;
288 eval { require $file };
289
290 return $@ ? 0 : 1;
291 }
292
2db7970 @mrash install.pl
authored
293 sub install_manpage() {
42dc6cb @mrash updated to not install man page if gpgdir is installed by a non-root use...
authored
294
295 if ($non_root_user) {
296 print
297 "[+] Because this is a non-root install, the man page will not be installed\n",
298 " but you can download it here: http://www.cipherdyne.org/gpgdir\n\n";
299 return;
300 }
301
b5e2f1d @mrash updated to [+] and related prefixes
authored
302 die "[*] man page: $manpage does not exist. Download gpgdir " .
4bd0e5a @mrash updated to cipherdyne.org
authored
303 "from http://www.cipherdyne.org/gpgdir" unless -e $manpage;
2db7970 @mrash install.pl
authored
304 ### default location to put the gpgdir man page, but check with
305 ### /etc/man.config
306 my $mpath = '/usr/share/man/man1';
307 if (-e '/etc/man.config') {
308 ### prefer to install $manpage in /usr/local/man/man1 if
309 ### this directory is configured in /etc/man.config
310 open M, '< /etc/man.config' or
b5e2f1d @mrash updated to [+] and related prefixes
authored
311 die "[*] Could not open /etc/man.config: $!";
2db7970 @mrash install.pl
authored
312 my @lines = <M>;
313 close M;
314 ### prefer the path "/usr/share/man"
315 my $found = 0;
316 for my $line (@lines) {
317 chomp $line;
318 if ($line =~ m|^MANPATH\s+/usr/share/man|) {
319 $found = 1;
320 last;
321 }
322 }
323 ### try to find "/usr/local/man" if we didn't find /usr/share/man
324 unless ($found) {
325 for my $line (@lines) {
326 chomp $line;
327 if ($line =~ m|^MANPATH\s+/usr/local/man|) {
328 $mpath = '/usr/local/man/man1';
329 $found = 1;
330 last;
331 }
332 }
333 }
334 ### if we still have not found one of the above man paths,
335 ### just select the first one out of /etc/man.config
336 unless ($found) {
337 for my $line (@lines) {
338 chomp $line;
339 if ($line =~ m|^MANPATH\s+(\S+)|) {
340 $mpath = $1;
341 last;
342 }
343 }
344 }
345 }
346 mkdir $mpath, 0755 unless -d $mpath;
347 my $mfile = "${mpath}/${manpage}";
b5e2f1d @mrash updated to [+] and related prefixes
authored
348 print "[+] Installing $manpage man page as: $mfile\n";
349 copy $manpage, $mfile or die "[*] Could not copy $manpage to " .
2db7970 @mrash install.pl
authored
350 "$mfile: $!";
b5e2f1d @mrash updated to [+] and related prefixes
authored
351 chmod 0644, $mfile or die "[*] Could not set permissions on ".
2db7970 @mrash install.pl
authored
352 "$mfile to 0644";
353 chown 0, 0, $mfile or
b5e2f1d @mrash updated to [+] and related prefixes
authored
354 die "[*] Could not chown 0,0,$mfile: $!";
355 print "[+] Compressing man page: $mfile\n";
dc7eeae @mrash fixed chmod statements
authored
356 ### remove the old one so gzip doesn't prompt us
357 unlink "${mfile}.gz" if -e "${mfile}.gz";
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
358 system "$cmds{'gzip'} $mfile";
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
359 return;
360 }
361
362 ### check paths to commands and attempt to correct if any are wrong.
363 sub check_commands() {
364 my @path = qw(
365 /bin
366 /sbin
367 /usr/bin
368 /usr/sbin
369 /usr/local/bin
370 /usr/local/sbin
371 );
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
372 CMD: for my $cmd (keys %cmds) {
373 unless (-x $cmds{$cmd}) {
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
374 my $found = 0;
375 PATH: for my $dir (@path) {
376 if (-x "${dir}/${cmd}") {
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
377 $cmds{$cmd} = "${dir}/${cmd}";
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
378 $found = 1;
379 last PATH;
380 }
381 }
382 unless ($found) {
b5e2f1d @mrash updated to [+] and related prefixes
authored
383 die "[*] Could not find $cmd anywhere!!! ",
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
384 "Please edit the config section to include the path to ",
385 "$cmd.\n";
386 }
387 }
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
388 unless (-x $cmds{$cmd}) {
b5e2f1d @mrash updated to [+] and related prefixes
authored
389 die "[*] $cmd is located at ",
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
390 "$cmds{$cmd} but is not executable by uid: $<\n";
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
391 }
392 }
393 return;
394 }
395
d481367 @mrash non-root user installation support, and Cygwin support
authored
396 sub is_cygwin() {
397
398 my $rv = 0;
399
400 ### get OS output from uname
401 open UNAME, "uname -o |" or return $rv;
402 while (<UNAME>) {
403 $rv = 1 if /Cygwin/;
404 }
405 close UNAME;
406
407 return $rv;
408 }
409
410
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
411 sub setup() {
412 unless (-d $libdir) {
b5e2f1d @mrash updated to [+] and related prefixes
authored
413 mkdir $libdir, 0755 or die "[*] Could not create $libdir: $!"
565e8d6 @mrash updated to install GnuPG and TermReadKey modules in /usr/lib/gpgdir
authored
414 }
2db7970 @mrash install.pl
authored
415 return;
416 }
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
417
418 sub usage() {
419 my $exit_status = shift;
420 print <<_HELP_;
421
16e446e @mrash minor copyright date and help update
authored
422 Usage: install.pl [options]
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
423
198baf2 @mrash added locale setting and --Exclude option
authored
424 -u, --uninstall - Uninstall gpgdir.
425 -f, --force-mod-install - Force all perl modules to be installed
426 even if some already exist in the system
427 /usr/lib/perl5 tree.
428 -F, --Force-mod-regex <re> - Specify a regex to match a module name
429 and force the installation of such modules.
430 -E, --Exclude-mod-regex <re> - Exclude a perl module that matches this
431 regular expression.
16e446e @mrash minor copyright date and help update
authored
432 -S, --Skip-mod-install - Do not install any perl modules.
198baf2 @mrash added locale setting and --Exclude option
authored
433
434 -L, --LANG <locale> - Specify LANG env variable (actually the
435 LC_ALL variable).
436 -h --help - Prints this help message.
f1e6648 @mrash merged changes from gpgdir_GPGINTERFACE branch for GunPG::Interface usag...
authored
437
438 _HELP_
439 exit $exit_status;
440 }
Something went wrong with that request. Please try again.