summaryrefslogtreecommitdiffstats
path: root/perl-install/printer/services.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/printer/services.pm')
-rw-r--r--perl-install/printer/services.pm61
1 files changed, 61 insertions, 0 deletions
diff --git a/perl-install/printer/services.pm b/perl-install/printer/services.pm
new file mode 100644
index 000000000..1b68da96a
--- /dev/null
+++ b/perl-install/printer/services.pm
@@ -0,0 +1,61 @@
+package printer::services;
+
+use strict;
+use services;
+use run_program;
+
+sub restart ($) {
+ my ($service) = @_;
+ if (services::restart($service)) {
+ # CUPS needs some time to come up.
+ wait_for_cups() if $service eq "cups";
+ return 1;
+ } else { return 0 }
+}
+
+sub start ($) {
+ my ($service) = @_;
+ if (services::start($service)) {
+ # CUPS needs some time to come up.
+ wait_for_cups() if $service eq "cups";
+ return 1;
+ } else { return 0 }
+}
+
+sub start_not_running_service ($) {
+ my ($service) = @_;
+ # The exit status is not zero when the service is not running
+ if (services::start_not_running_service($service)) {
+ return 0;
+ } else {
+ run_program::rooted($::prefix, "/etc/rc.d/init.d/$service", "start");
+ if (($? >> 8) != 0) {
+ return 0;
+ } else {
+ # CUPS needs some time to come up.
+ wait_for_cups() if $service eq "cups";
+ return 1;
+ }
+ }
+}
+
+sub wait_for_cups {
+ # CUPS needs some time to come up. Wait up to 30 seconds, checking
+ # whether CUPS is ready.
+ my $cupsready = 0;
+ my $i;
+ for ($i = 0; $i < 30; $i++) {
+ run_program::rooted($::prefix, "/usr/bin/lpstat", "-r");
+ if (($? >> 8) != 0) {
+ # CUPS is not ready, continue
+ sleep 1;
+ } else {
+ # CUPS is ready, quit
+ $cupsready = 1;
+ last;
+ }
+ }
+ return $cupsready;
+}
+
+1;