Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
unix
FI printers over Samba on Linux
Commits
4d285eef
Commit
4d285eef
authored
Jan 05, 2021
by
Martin Klimes (k11m1)
Browse files
Perl::Tidy + bugfixes
parent
c8897a61
Changes
1
Hide whitespace changes
Inline
Side-by-side
install.pl
View file @
4d285eef
...
...
@@ -10,62 +10,135 @@ use Cwd qw(cwd);
use
File::
Path
;
use
File::
Copy
;
# my $data = LoadFile("printers.yml");
my
$printers
=
LoadFile
("
printers.yml
");
print
Dumper
$printers
;
my
$models
=
LoadFile
("
models.yml
");
print
Dumper
$models
;
# NOTE to generate
#my $printers = LoadFile("printers.yml");
#print Dumper $printers;
#my $models = LoadFile("models.yml");
#print Dumper $models;
## DATA ##
my
$printers
=
{
'
copy4b
'
=>
{
'
model
'
=>
'
TA5007ci
',
'
location
'
=>
'
Building B, 4th floor
'
},
'
copy3a
'
=>
{
'
model
'
=>
'
TA4505ci
',
'
location
'
=>
'
Building A, 3th floor kitchen
'
},
'
lj5c
'
=>
{
'
model
'
=>
'
hp-laserjet-600
',
'
location
'
=>
'
Building C, 5th floor, next to copy
'
},
'
copy5b
'
=>
{
'
model
'
=>
'
TA5007ci
',
'
location
'
=>
'
Building B, 5th floor
'
},
'
lj-b010
'
=>
{
'
location
'
=>
'
Building B, groundfloor, Building Management
'
},
'
lj4c
'
=>
{
'
location
'
=>
'
Building C, 4th floor, next to copy
',
'
model
'
=>
'
hp-laserjet-600
'
},
'
lj4p
'
=>
{
'
model
'
=>
'
hp-laserjet-p4015x
',
'
location
'
=>
'
Building B, 4th floor, next to copy
'
},
'
lj4a
'
=>
{
'
model
'
=>
'
hp-laserjet-600
',
'
location
'
=>
'
Building A, 4th floor kitchen
'
},
'
copy4a
'
=>
{
'
location
'
=>
'
Building A, 4th floor kitchen
',
'
model
'
=>
'
TA4505ci
'
},
'
copy2a
'
=>
{
'
model
'
=>
'
TA4505ci
',
'
location
'
=>
'
Building A, 2nd floor kitchen
'
},
'
lj3a
'
=>
{
'
location
'
=>
'
Building A, 3th floor kitchen
',
'
model
'
=>
'
hp-laserjet-600
'
},
'
lj2a
'
=>
{
'
model
'
=>
'
hp-laserjet-600
',
'
location
'
=>
'
Building A, 2nd floor kitchen
'
},
'
copy5c
'
=>
{
'
model
'
=>
'
TA4505ci
',
'
location
'
=>
'
Building C, 5th floor
'
},
'
lj3b
'
=>
{
'
model
'
=>
'
hp-laserjet-p4515x
',
'
location
'
=>
'
Building B, 3th floor, kitchen
'
},
'
lj-a302
'
=>
{
'
location
'
=>
'
Building A, 3th floor A302 LaSArIS
',
'
model
'
=>
'
hp-laserjet-600
'
},
'
copy4c
'
=>
{
'
model
'
=>
'
TA4505ci
',
'
location
'
=>
'
Building C, 4th floor
'
},
'
lj2b
'
=>
{
'
model
'
=>
'
hp-laserjet-p3015
',
'
location
'
=>
'
Building B, 2nd floor, kitchen
'
}
};
my
$models
=
{
'
TA5007ci
'
=>
{
'
filters
'
=>
[
'
kyofilter_pre_E
',
'
kyofilter_E
'
]
},
'
TA4505ci
'
=>
{
'
filters
'
=>
['
kyofilter_B
']
}
};
# TODO use sudo or root?
# # test
## END OF DATA ##
sub
get_description
{
my
(
$printer_name
)
=
@_
;
return
"
$printer_name
(FI MUNI)
"
return
"
$printer_name
(FI MUNI)
"
;
}
sub
prompt_username
{
print
"
Enter username:
";
chomp
(
my
$username
=
<
STDIN
>
);
return
$username
chomp
(
my
$username
=
<>
);
return
$username
;
}
sub
prompt_password
{
print
"
Enter password:
";
system
("
stty -echo
");
chomp
(
my
$password1
=
<
STDIN
>
);
chomp
(
my
$password1
=
<>
);
system
('
stty echo
');
print
"
\n
Repeat password:
";
system
('
stty -echo
');
chomp
(
my
$password2
=
<
STDIN
>
);
chomp
(
my
$password2
=
<>
);
system
("
stty echo
");
print
"
\n
";
if
(
$password1
ne
$password2
)
{
if
(
$password1
ne
$password2
)
{
say
"
Error: Passwords do not match!
";
exit
1
;
}
return
$password1
return
$password1
;
}
sub
get_url
{
my
(
$printer_name
)
=
@_
;
my
$user
=
prompt_username
();
my
$password
=
prompt_password
();
return
"
smb://NTFI
\\
${user}
:
${password}
\@
print.fi.muni.cz/
$printer_name
"
my
$user
=
prompt_username
();
my
$password
=
prompt_password
();
return
"
smb://NTFI
\\
${user}
:
${password}
\@
print.fi.muni.cz/
$printer_name
";
}
sub
hp_laserjet_600
{
my
(
$printer_name
)
=
@_
;
# if ($? != 0) {
# die "Could not make folder";
# }
# my $dir = cwd;
# say $dir;
my
$url
=
get_url
(
$printer_name
);
my
$command
=
qq(lpadmin \\
...
...
@@ -78,31 +151,33 @@ sub hp_laserjet_600 {
-o media-default=iso_a4_210x297mm \\
-o sides-default=two-sided-long-edge \\
-o auth-info-required=username,password \\
-o HPOption_Duplexer=True)
;
# REVIEW nevím jestli tohle je ok
-o HPOption_Duplexer=True)
;
# REVIEW nevím jestli tohle je ok
say
$command
;
system
(
$command
);
return
;
}
sub
TA_4505ci
{
my
(
$printer_name
)
=
@_
;
my
$url
=
get_url
(
$printer_name
);
# Add cups printer
# sudo lpadmin CLI CUPS administration
# -p "${printers[$printer]}" Set printer name
# -D "${descriptions[$printer]}" Set printer description
# -L "${locations[$printer]}" Set printer location
# -E Enables the destination and accepts jobs (cupsaccept+cupsenable)
# -v smb://print.fi.muni.cz/$printer Set printer URI
# -m UTAX_TA/TA4505ci.ppd Set PPD file
# -o media-default=iso_a4_210x297mm Set default paper format
# -o sides-default=two-sided-long-edge Set two-sided as default
# -o auth-info-required=username,password Enable password authentication
# -o Option19=One Cassettes 3, 4 installed
# -o Option21=True Punch unit installed
# -o Option17=DF730 1000-page finisher installed
# Add cups printer
# sudo lpadmin CLI CUPS administration
# -p "${printers[$printer]}" Set printer name
# -D "${descriptions[$printer]}" Set printer description
# -L "${locations[$printer]}" Set printer location
# -E Enables the destination and accepts jobs (cupsaccept+cupsenable)
# -v smb://print.fi.muni.cz/$printer Set printer URI
# -m UTAX_TA/TA4505ci.ppd Set PPD file
# -o media-default=iso_a4_210x297mm Set default paper format
# -o sides-default=two-sided-long-edge Set two-sided as default
# -o auth-info-required=username,password Enable password authentication
# -o Option19=One Cassettes 3, 4 installed
# -o Option21=True Punch unit installed
# -o Option17=DF730 1000-page finisher installed
my
$command
=
qq(lpadmin \\
-p "${printer_name}.fi.muni" \\
...
...
@@ -116,11 +191,13 @@ sub TA_4505ci {
-o auth-info-required=username,password \\
-o Option19=One \\
-o Option21=True \\
-o Option17=DF730)
;
-o Option17=DF730)
;
say
$command
;
system
(
$command
);
return
;
}
sub
generic_printer
{
...
...
@@ -136,72 +213,73 @@ sub generic_printer {
-P "ppds/${printer_name}.ppd" \\
-o media-default=iso_a4_210x297mm \\
-o sides-default=two-sided-long-edge \\
-o auth-info-required=username,password)
;
-o auth-info-required=username,password)
;
say
$command
;
system
(
$command
);
return
;
}
sub
copy_filter
{
(
my
$filter
)
=
@_
;
(
my
$filter
)
=
@_
;
# my $filter = "kyofilter_B";
my
$destination
=
"
/usr/libexec/cups/filter/
";
$destination
=
"
first/second/
";
if
(
!
-
d
$destination
)
{
my
$dirs
=
eval
{
mkpath
(
$destination
)};
if
(
!
-
d
$destination
)
{
my
$dirs
=
eval
{
mkpath
(
$destination
)
};
die
"
Failed to create
$destination
$@
\n
"
unless
$dirs
;
}
copy
(
$filter
,
$destination
)
or
die
"
Failed to copy
$filter
: $!
\n
";
say
"
[OK] Copied
$filter
.
"
}
copy
(
$filter
,
$destination
)
or
die
"
Failed to copy
$filter
: $!
\n
";
say
"
[OK] Copied
$filter
.
";
return
;
}
sub
print_printers
()
{
say
"
Available printers:
";
printf
"
%-14s | %s
\n
",
"
Printer name
",
"
Location
";
say
"
-
"
x
50
;
for
(
sort
keys
%$printers
)
{
say
"
-
"
x
50
;
for
(
sort
keys
%$printers
)
{
printf
"
%-14s | %s
\n
",
$_
,
$printers
->
{
$_
}
->
{
location
};
}
return
;
}
sub
usage
()
{
say
"
Script to install FI printers on linux.
";
say
"
Requires local CUPS server running and SAMBA client installed.
";
say
"
usage: $0 <printer-name>
";
say
"
Triumph-Adler 50007ci needs Python 2.7 as a dependency.
";
say
"
Must be run as root.
";
say
"
Triumph-Adler 50007ci needs Python 2.7 as a dependency and will install 2 python modules automatically.
";
print
"
\n\n
";
print_printers
();
#foreach my $key (keys %$printers)
#{
# print "$key ";
#}
#print "\n";
exit
1
;
}
sub
check_python
{
my
$regex
=
/^Python 2\.7*/
;
#FIXME Use of unitialized value $_ in pattern match
my
$regex
=
/^Python 2\.7*/x
;
#FIXME Use of unitialized value $_ in pattern match
my
$output
=
qx/python -V 2>&1/
;
if
(
$output
=~
$regex
)
{
if
(
$output
=~
$regex
)
{
say
"
[OK] Python 2.7 is present.
";
return
"
python
";
}
else
{
# TODO FIXME ADD python2
say
"
[ERROR] Python 2.7 is not present
";
# TRY python2 command
my
$s_output
=
qx/python2 -V 2>&1/
;
if
(
$s_output
=~
$regex
)
{
say
"
ASI OK, TESTING NEEDED
";
# TODO OTESTOVAT
if
(
$s_output
=~
$regex
)
{
say
"
ASI OK, TESTING NEEDED
";
# TODO OTESTOVAT
return
"
python2
";
}
else
{
...
...
@@ -210,83 +288,90 @@ sub check_python {
}
}
my
$printer_name
=
shift
or
usage
();
my
$output
=
`
which smbclient >/dev/null 2>/dev/null
`;
my
$status
=
$?
;
say
$status
;
say
$output
;
# TODO enable this
if
(
$?
!=
0
)
{
say
"
Samba client seems not to be installed. (smbclinet)
";
exit
1
;
}
if
(
not
(
exists
(
$printers
->
{
$printer_name
})))
{
say
"
Printer
$printer_name
is not supported.
";
print_printers
();
exit
1
;
}
#if ($<) {
# say "This program is meant to be run as a root";
# say
# die "Error: exiting program as not executed by root\n";
#}
sub
python_package
{
(
my
$package
,
my
$python
)
=
@_
;
say
"
[INFO] Installing
$package
";
my
$status
=
chdir
"
$package
";
if
(
$status
==
0
)
{
say
"
[ERROR] folder
$package
is not present
";
(
my
$package
_name
,
my
$python
)
=
@_
;
say
"
[INFO] Installing
$package
_name
";
my
$status
=
chdir
"
$package
_name
";
if
(
$status
==
0
)
{
say
"
[ERROR] folder
$package
_name
is not present
";
}
my
$output
=
system
("
${python}
setup.py install
");
if
(
$?
!=
0
)
{
die
"
[ERROR]
$package
exited with different exit code than 0!
";
if
(
$?
!=
0
)
{
croak
"
[ERROR]
$package
_name
exited with different exit code than 0!
";
}
$status
=
chdir
'
..
';
if
(
$status
==
0
)
{
die
"
[FATAL] Could not return to the working directory
";
if
(
$status
==
0
)
{
croak
"
[FATAL] Could not return to the working directory
";
}
return
;
}
sub
pre_TA5007ci
{
my
$python
=
check_python
;
python_package
"
PyPDF2-1.26.0
",
$python
;
python_package
"
reportlab
",
$python
;
python_package
(
"
PyPDF2-1.26.0
",
$python
);
python_package
(
"
reportlab
",
$python
);
return
;
}
say
$printers
->
{
$printer_name
}
->
{'
model
'};
my
$model
=
$printers
->
{
$printer_name
}
->
{'
model
'};
#######################
# START OF THE SCRIPT #
#######################
# TODO restructure this mess
# TODO put this as static data and not yml
if
(
@ARGV
==
0
||
$ARGV
[
0
]
eq
"
-h
"
||
$ARGV
[
0
]
eq
"
--help
"
)
{
usage
;
}
if
(
$model
eq
"
TA5007ci
"
)
{
pre_TA5007ci
()
;
if
(
@ARGV
!=
1
)
{
usage
;
}
my
(
$printer_name
)
=
@ARGV
;
if
(
$model
eq
"
TA4505ci
")
{
TA_4505ci
"
$printer_name
";
# Check for smbclient
my
$output
=
`
which smbclient >/dev/null 2>/dev/null
`;
if
(
$?
!=
0
)
{
say
"
Samba client seems not to be installed. (smbclinet)
";
exit
1
;
}
if
(
not
(
exists
(
$printers
->
{
$printer_name
}
)
)
)
{
say
"
Printer
$printer_name
is not supported.
";
print_printers
();
exit
1
;
}
elsif
(
$model
eq
"
hp-laserjet-600
")
{
# Check if we have Root
die
"
Must be run with root privileges
\n
"
if
$>
!=
0
;
say
$printers
->
{
$printer_name
}
->
{'
model
'};
my
$model
=
$printers
->
{
$printer_name
}
->
{'
model
'};
if
(
$model
eq
"
TA5007ci
"
)
{
pre_TA5007ci
();
}
if
(
$model
eq
"
TA4505ci
"
)
{
TA_4505ci
("
$printer_name
");
}
elsif
(
$model
eq
"
hp-laserjet-600
"
)
{
hp_laserjet_600
$printer_name
;
}
else
{
generic_printer
("
$printer_name
");
}
# NOTE there was a problem before // THIS DOESNT WORK?
foreach
(
$models
->
{
$model
}
->
{'
filters
'})
{
foreach
(
@
$_
){
foreach
(
$models
->
{
$model
}
->
{'
filters
'}
)
{
foreach
(
@
$_
)
{
say
$_
;
}
}
}
say
"
DONE!
";
# hp_laserjet_600($printer_name);
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment