+use strict;
+use Pod::Usage;
+
+use Term::ReadKey;
+use Time::HiRes;
+use LWP::UserAgent;
+
+=head1 NAME
+
+B<grml-tips> - query a signature file for a specific keyword and display results
+
+=head1 SYNOPSIS
+
+B<grml-tips> [OPTION] I<keyword>
+
+=head1 DESCRIPTION
+
+This manual page documents briefly the B<grml-tips> command.
+
+=head1 OPTIONS
+
+=over 8
+
+=item B<--help>
+
+Print this help and exit.
+
+=back
+
+=head1 EXAMPLES
+
+=over 8
+
+=item B<grml-tips> I<ntfs>
+
+Query grml-tips file for tips / hints including keyword "ntfs".
+
+=item B<grml-tips> I<.>
+
+Display all available B<grml-tips> at once.
+
+=back
+
+=head1 FILES
+
+/usr/share/grml-tips/grml_tips
+
+Signature file containing the tips.
+
+=head1 SEE ALSO
+
+L<grml(1)>
+
+=head1 AUTHOR
+
+grml-tips was written by Alexander Wirt <formorer@grml.org>
+
+=cut
+
+
+my $grml_tips = '/usr/share/grml-tips/grml_tips';
+my $pattern = shift;
+
+if ($pattern eq '') {
+ pod2usage( {
+ -message => 'No search pattern provided',
+ -exitval => -1, });
+} elsif ($pattern eq '--help') {
+ pod2usage();
+}
+
+my @tips;
+my $fh;
+if (! open ($fh, '<', "$grml_tips")) {
+ print "Error: $grml_tips not found.\nExiting.";
+ exit -1;
+}
+
+my $tip = '';
+my $tip_flag = 0;
+
+while (my $line = <$fh>) {
+ if ($line !~ /^-- $/) {
+ $tip .= $line;
+ } else {
+ if ( "$tip" =~ /$pattern/mi ) {
+ $tip .= $line;
+ print "$tip";
+ $tip = '';
+ $tip_flag = 1;
+ } else {
+ $tip = '';
+ }
+ }
+}
+close($fh);
+
+if (!$tip_flag) {
+ print "Sorry, could not find a tip for '$pattern'. :-(\n\n",
+ "Do you want to submit the keyword '$pattern' to grml's keyword database?\n",
+ "The grml team will write tips for the most requested and useful keywords.\n",
+ "To use and contribute to this feature you'll need a working networking connection.\n",
+ "No personal data will be transmitted to the database.\n\n",
+ "Send \"$pattern\" to grml's keyword database? [y|N] ";
+
+ ReadMode 4; # Turn off controls keys
+ my $x;
+ while (not defined ($x = ReadKey(-1))) {
+ Time::HiRes::sleep(0.5);
+ }
+ ReadMode 0; # Reset tty mode before exiting
+ print "\n\n";
+ if ($x =~ /(y|j)/i) {
+ my $version;
+ if ( -f '/etc/grml_version' ) {
+ open (my $fh, '<', '/etc/grml_version') or die "Could not open /etc/grml_version: $!";
+ $version = <$fh>;
+ chomp $version;
+ close ($fh);
+ } elsif ( -f '/etc/debian_version') {
+ open (my $fh, '<', '/etc/debian_version') or die "Could not open /etc/debian_version: $!";
+ $version = <$fh>;
+ chomp $version;
+ close ($fh);
+ } else {
+ $version = 'unknown';
+ }
+ my $ua = new LWP::UserAgent;
+ $ua->agent("grml-tips 0.0 "); # set the HTTP 'browser' type
+ my $res =
+ $ua->post('http://deb.grml.org/~formorer/submissions/keyword.cgi',
+ [ 'version' => $version,
+ 'keyword' => $pattern
+ ],
+ );
+ if ($res->is_success) {
+ my $content = $res->decoded_content;
+ if ($content =~ /Submission received/) {
+ print "Keyword '$pattern' has been submitted to grml's keyword database.\nThanks.\n";
+ } else {
+ print "Your pattern could not be submitted.\n",
+ "Please file a bug against grml-tips at ",
+ "http://bts.grml.org/\n",
+ "Thanks!\n";
+ }
+ } else {
+ print "Could not submitt '$pattern': " . $res->status_line . "\n";
+ }
+
+
+ } else {
+ print "'$pattern' has not been sent to grml's keyword database as requested.\n";
+ print "If you want to submit a tip please mail it to tips\@grml.org - thank you!\n";
+ }
+}